微信扫码支付功能(1)---通过谷歌二维码工具生成付款码

生成付款二维码

一、微信网站扫码支付介绍

1、扫码支付文档

微信开发官方文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5

有关微信支付的流程图微信官方已经说的很清楚了,这里也无需其它解释。这边采用微信支付扫码模式二(不依赖商户平台设置回调url),所以在生成二维码之前

要先调用微信统一下单支付接口,获得code_url,再通过谷歌二维码工具将code_url生成二维码图片。

2、名称理解

在微信扫码支付功能开发之前,首先要获得微信认证而得到的一些信息如下:

开发者账户信息

公众号 appid: wx0pi2m4x6we76140w

公众号 appsecret: x82552d8w0y1i161lp9o7821s5d7osry

商户号 mer_id: 5731202714

支付    key: PL9wT9n9Ljav4zSN66J0bmzT1Yl54429

3、和微信支付交互方式

(1)、post方式提交

(2)、xml格式的协议

(3)、签名算法MD5

(4)、接口交易单位为 分

(5)、交易类型:JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付

(6)、商户订单号规则:

商户支付的订单号由商户自定义生成,仅支持使用字母、数字、中划线-、下划线_、竖线|、星号*这些英文半角字符的组合,请勿使用汉字或全角等特殊字符,

微信支付要求商户订单号保持唯一性

(7)、安全规范:

签名算法:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3

校验工具:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=20_1

(8)、采用微信支付扫码模式二(不依赖商户平台设置回调url)

二、实战开发

1、点击购买商品调用接口

接口需要接收购买商品ID,用户ID,返回的就是二维码图片供用户扫码支付。

/**
 * 订单接口
 */
@RestController
@RequestMapping("/api/v1/order")
public class OrderController {

    @Autowired
    private VideoOrderService videoOrderService;

    /**
     * 用户点击购买下单接口
     */
    @GetMapping("buy")
    public void saveOrder(@RequestParam(value = "video_id",required = true)int videoId,
                              HttpServletRequest request,
                              HttpServletResponse response) throws Exception {

        /**
         * 实际开发需要获取用户id和用户当前ip,这里临时写死的配置
         * String ip = IpUtils.getIpAddr(request);
         * int userId = request.getAttribute("user_id");
         */
        int userId = 1;
        String ip = "120.25.1.43";
        //1、根据用户id和商品id生成订单
        VideoOrderDto videoOrderDto = new VideoOrderDto();
        videoOrderDto.setUserId(userId);
        videoOrderDto.setVideoId(videoId);
        videoOrderDto.setIp(ip);

        //2、保存订单同时返回codeUrl
        String codeUrl = videoOrderService.save(videoOrderDto);
        if(codeUrl == null) {
            throw new  NullPointerException();
        }

        //3、通过google工具生成二维码供用户扫码支付
         try{
            //3、1生成二维码配置
            Map<EncodeHintType,Object> hints =  new HashMap<>();

            //3、2设置纠错等级
            hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.L);

            //3、3编码类型
            hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");

            BitMatrix bitMatrix = new MultiFormatWriter().encode(codeUrl,BarcodeFormat.QR_CODE,400,400,hints);
            OutputStream out =  response.getOutputStream();

            MatrixToImageWriter.writeToStream(bitMatrix,"png",out);

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

2、进入VideoOrderService具体业务实现类

该类的主要业务逻辑是:

(1)通过商品ID查询是否有该商品信息

(2)通过用户ID查询是否存在该用户

(3)如果上面两步没有问题,则生成用户订单信息保存到数据库中

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public String save(VideoOrderDto videoOrderDto) throws Exception {

        //1、查找商品信息(这里商品指的是视频课程)
        Video video =  videoMapper.findById(videoOrderDto.getVideoId());

        //2、查找用户信息
        User user = userMapper.findByid(videoOrderDto.getUserId());

        //3、生成订单,插入数据库
        VideoOrder videoOrder = new VideoOrder();
        videoOrder.setTotalFee(video.getPrice());
        videoOrder.setVideoImg(video.getCoverImg());
        videoOrder.setVideoTitle(video.getTitle());
        videoOrder.setCreateTime(new Date());
        videoOrder.setVideoId(video.getId());
        videoOrder.setState(0);
        videoOrder.setUserId(user.getId());
        videoOrder.setHeadImg(user.getHeadImg());
        videoOrder.setNickname(user.getName());
        videoOrder.setDel(0);
        videoOrder.setIp(videoOrderDto.getIp());
        videoOrder.setOutTradeNo(CommonUtils.generateUUID());

        videoOrderMapper.insert(videoOrder);

        //4、获取codeurl
        String codeUrl = unifiedOrder(videoOrder);

        return codeUrl;
    }

3、回调微信统一下单接口,获取codeurl方法主要逻辑

微信官方统一下单接口文档说明: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

(1)  根据接口需求添加所需参数:比如appid,mch_id,body等等......

(2)sign签名获取:具体获取规则官方已经说明: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3

(3) 通过工具类将map集合转为xml格式字符串

(4)回调微信统一下单接口,接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder

(5)如果上一步成功(成功标志返回SUSSCUSS),则将返回成功的xml格式再通过工具类转为map

(6)通过key=code_url,获取value字符串,这也是最终生成二维码的字符串。code_url格式大致为:weixin://wxpay/s/An4baqw

接下来只要将code_url值变成二维码就可以供用户扫码付款了。

4、测试

调用http://localhost:8081/api/v1/order/buy?video_id=1接口

成功返回二维码:code_url有效期是两个小时

微信扫码之后:看到具体信息

再看数据库该商品信息:

github源码

github: https://github.com/yudiandemingzi/wechatpay

我只是偶尔安静下来,对过去的种种思忖一番。那些曾经的旧时光里即便有过天真愚钝,也不值得谴责。毕竟,往后的日子,还很长。不断鼓励自己,

天一亮,又是崭新的起点,又是未知的征程(上校16)

原文地址:https://www.cnblogs.com/qdhxhz/p/9708534.html

时间: 2024-10-15 02:17:22

微信扫码支付功能(1)---通过谷歌二维码工具生成付款码的相关文章

微信扫码支付功能(2)---用户扫码支付成功,微信异步回调商户接口

用户扫码支付成功,微信异步回调商户 上一篇博客完成用户扫码支付功能: https://www.cnblogs.com/qdhxhz/p/9708534.html 当用户扫码支付成功之后,微信会异步回调商户接口,告知用户支付成功.好让商户进行下一步操作. 一.接口说明 1.流程图 这里要做的就是用户支付成功后,微信异步通知商户支付结果,商户收到通知后告知支付通知接收情况. 2.接口说明 有关商户接口应注意以下几点: (1)该链接是通过[统一下单API]中提交的参数notify_url设置,如果链接

微信小程序支付功能 C# .NET开发

微信小程序支付功能的开发的时候坑比较多,不过对于钱的事谨慎也是好事.网上关于小程序支付的实例很多,但是大多多少有些问题,C#开发的更少.此篇文档的目的是讲开发过程中遇到的问题做一个备注,也方便其他开发的同学作为参考! 1.首先建议把官方文档支付部分看上三遍,每个细节都不要放过,因为任何一个点和微信要求不符都会导致支付不成功.https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=3_1 2.经过验证的微信支付功能,会需要一些商

微信公众平台开发(2)扫描二维码添加公众账号

作者做过微信二维码和地理信息的程序,本章介绍一下获取二维码和处理用户扫描二维码的过程. 要想开通生成二维码api必须是认证的服务号,如果没有可以采用公众平台测试账号,地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 登陆后台的界面如图: 终于看到了传说中的appID,appsecret. 当微信用户扫描二维码时,实现两个功能: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者.

微信设备公众号不用扫描相应设备二维码也可以添加关注

之前微信设备公众号需要扫描相应设备二维码才可以添加关注,先在微信发布更新,不用扫描相应设备二维码也可以添加关注微信设备公众号了,和普通公众号一样 微信设备公众号无需绑定相关设备也可被关注 好消息,请伙伴们奔走相告,微信新版本(安卓应用宝上的6.0版本,IOS6.0.1版本)设备公众号现无需绑定相关设备也可被关注,从此,你再也不用担心开通设备功能影响涨粉了,可以直接把现有服务号开通设备功能,而不用重新申请服务号. 之前需要扫描相应设备二维码才可以添加关注,现在不用扫描相应设备二维码也可以添加关注.

二维码防伪标签制,定制二维码防伪有这些优点呢?

商品定制二维码防伪标签是二维码技术性基本上,在再加315防伪一物一码技术性才称为二维码防伪标签,技术性以二维码为信息内容为规范,会对没每一个商品信息.真假.跟中.查寻.定制等,315防伪一物一码创建在产品信息定制数据链及商品流转全过程管控系统软件,顾客能够根据手机上内置扫一扫认证真假,或微信扫一扫二维码防伪标签,顾客就能查寻到产品信息辨别真假,避免商品被仿,仿冒商品流入销售市场,下边315防伪网编详细介绍一下二维码防伪标签定制为何挑选定制,有这些优点. 二维码防伪有什么优点呢? 1.维修保养著名

编程题:指向二维数组元素的指针变量。功能:已知二维数组a[2][3],输入输出全部元素。

#include<stdio.h> void main() { int a[2][3],i,j; int *p; /*用坐标法输入二维数组元素*/ for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); /*用指针法输出二维数组元素*/ p=a[0];         /*等价于p&a[0][0];*/ for(;p<a[0]+6;p++)   printf("%4d&quo

php生成带自定义logo和带二维码跳转自定义地址的二维码

index.php<?phpheader('Content-type:text/html;charset=UTF-8');// 指定允许其他域名访问header('Access-Control-Allow-Origin:*');// 响应类型fheader('Access-Control-Allow-Methods:POST');// 响应头设置header('Access-Control-Allow-Headers:x-requested-with,content-type');include

微信公众平台支付功能开通流程

微信支付是微信公众平台向有在线收款需求的公众号提供的商品展示.在线下单及付款.即时到帐.经营分析等功能的整体解决方案. 企业在开通微信支付接口后,用户只需用手机扫一扫二维码便可立即支付,整个过程非常简便流畅.商户可以把商品做成二维码,张贴在车站.广告牌.海报.名片等处.同时,商户也可通过微信小店.自定义菜单.关键字回复等方式向订阅用户推送商品消息,用户可在微信公众号中完成选购支付的流程. 开通微信支付所需资料 一般能开通微信支付的主体为企业.政府.组织机构.社团.媒体.个体户等.个人用户无法开通

记微信公众平台开发之V3版微信native原生支付功能开发

一.生成商品信息 动态链接支付过程中,是先生成商品交易进行,再来进行支付交易的. 1. 商品信息准备 主要是先定义商品的名称及价格,以及交易号.代码如下. include_once("../WxPayPubHelper/WxPayPubHelper.php"); //使用统一支付接口 $unifiedOrder = new UnifiedOrder_pub(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 /