生成付款二维码

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

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 {@Autowiredprivate 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、保存订单同时返回codeUrlString 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、获取codeurlString 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)

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

  1. Android实现二维码扫描功能-ZXing识别图片二维码,相册选图

    文章目录 1.演示 2.权限问题 3.实现步骤 4.工具类 5.图片Uri处理(重要更新) 1.演示 2.权限问题 部分朋友在打开相册时遇到读写权限未授权的问题,我在开发的时候没有遇到,也没有注册读写 ...

  2. 微信扫码支付功能详细教程————Java

    前言  首先声明 我并非原创 原创是 http://blog.csdn.net/wangqiuyun/article/details/51241064 我只是在前辈的基础 加以解释说明 还有自己的一些 ...

  3. 十 Node.js实现微信小程序支付功能

    十 Node.js实现微信小程序支付功能 一 开发前提 二 支付流程介绍 三 上代码 1.小程序端发起后台请求,完成统一下单 1.1 小程序端发起后台请求 1.2 Node.js后台接收请求,完成统一 ...

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

    用户扫码支付成功,微信异步回调商户 上一篇博客完成用户扫码支付功能: https://www.cnblogs.com/qdhxhz/p/9708534.html 当用户扫码支付成功之后,微信会异步回调 ...

  5. 微信小程序—调用扫一扫功能,通过扫描二维码连接蓝牙模块

    使用微信小程序的扫码功能连接蓝牙,具体操作如下 实现流程图 Created with Raphaël 2.2.0准备好二维码小程序调用扫码功能小程序获取到二维码内容(我这里为蓝牙的名字)小程序通过搜索 ...

  6. 微信小程序支付功能-服务器端实现(附源码)

    实现了小程序最新的V3版本支付功能, 包括:支付.支付通知.退款.退款通知. 服务器端使用java开发,springboot框架 源码链接在评论中 微信小程序支付功能-服务器端实现(附源码)_哔哩哔哩 ...

  7. 10行代码实现微信小程序支付功能,使用小程序云开发实现小程序支付功能(含源码

    前面给大家讲过一个借助小程序云开发实现微信支付的,但是那个操作稍微有点繁琐,并且还会经常出现问题,今天就给大家讲一个简单的,并且借助官方支付api实现小程序支付功能. 传送门 借助小程序云开发实现小程 ...

  8. 视频教程-10分钟实现微信小程序支付功能-微信开发

    10分钟实现微信小程序支付功能 码农一枚,非著名全栈开发人员.分享自己的一些经验,学习心得,希望后来人少走弯路,少填坑. 多年全栈开发经验,擅长小程序,java,安卓,web前端开发. 邱石 ¥19. ...

  9. 哈哈!没想到吧!Java也可以 实现微信和支付宝支付功能(附代码)

    一.前期准备 1.申请好微信商户号appid,拿到商户id和商户秘钥,退款的话需要商户证书 2.申请好支付宝商户号appid,商户公钥和秘钥(需要用支付宝工具自己生成),支付宝退款不需要证书 二.数据 ...

最新文章

  1. 修改Kali Linux 2020.1主题颜色
  2. 马斯克一作!Neuralink脑机接口细节公布,特殊材料防大脑损伤,专用芯片助技术落地...
  3. HDU 1251(trie树)
  4. c语言 整形数组如果输入回车,数字数组 输入字符'q'推出程序 输入enter,停止输入...
  5. Java并发编程—如何取消定时任务
  6. 分布式架构的NoSQL
  7. CSS border-radius边框圆角
  8. 2018java最新面试题
  9. macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
  10. 数学建模-14.主成分分析PCA
  11. zabbix邮件报警功能的验证
  12. Django下载安装及创建项目
  13. 软件升级 防火墙 飞塔_FortiGate软件版本升级
  14. switch监听android代码,Android switch当代码setCheck时,不调用onCheckedChanged
  15. 百度坐标转WGS84
  16. office起动缓慢_怎么解决Office2016启动特别慢?
  17. cola ui ajax,打开组后的新布局不基于最后一个cola.js布局
  18. 首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?
  19. Unity中行星和恒星的旋转——Rotate和RotateAround
  20. elf文件中代码段有绝对地址但重定位表中无.text.rel

热门文章

  1. 扫脸付、VR付实现了, “KongFu”空付还远吗?
  2. 一款免费的Excel作图插件
  3. 文本导入数据到oracle_如何将文本文件导入到Oracle数据库中 ?
  4. SpringBoot整合Swagger2-knife4j
  5. 概率图模型(模型表示)
  6. python 图像等比例缩放
  7. matlab中mat文件的生成和读取
  8. 前端常见功能测试用例
  9. Python学习:pwd模块
  10. 苹果电话录到android,怎样从苹果手机导出通讯录到安卓手机