云裂变营销网

标题: 微信小程序支付接口的实现 [打印本页]

作者: 匿名    时间: 2023-3-24 10:03
标题: 微信小程序支付接口的实现
小程序支付:

同学介绍接了个私活,开发一个支付模块,之前没有搞过小程序想借此机会学一下。由于甲方的原因(不会设置支付目录,不懂APP_ID与MCH_ID的区别,给错了API_KEY)调研了一下午后决定使用小程序支付API。小程序的支付更简便了些,不需要设置支付目录、不需要授权域名等操作。其实主要的流程就两步:
开发者服务端向微信服务器发起统一下单请求,把返回的参数处理一下给小程序端,小程序调起微信支付。
1. 准备工作:

微信小程序的支付功能共需要以下几个参数
  1. APP_ID="";
  2. MCH_ID="";
  3. API_KEY="";
  4. OPNE_ID="";
复制代码
1.1 申请服务号(需要用的MCH_ID)小程序认证、接通微信支付


微信小程序支付接口的实现-1.jpg
小程序认证以后,可以在小程序后台,微信支付菜单栏,申请微信支付。填写企业信息和对公账户,微信支付会打一笔随机金额到对公账户,输入金额完成验证后,在线签署迁移,即完成了微信支付的申请流程。微信支付申请完,会发送微信支付商户号,商户平台用户名密码等信息到注册者邮箱。
1.2 配置小程序密钥


微信小程序支付接口的实现-2.jpg
小程序后台设置页,点击生成,管理员验证二维码后,会随机生成AppSecret。请妥善保管好Appsecret,不要明文存储于服务器,AppSecret用于和微信服务器交互。比如获取用户的openid接口就需要用到。
1.3 配置微信支付密钥和证书

在微信支付(http://pay.weixin.qq.com)在账户中心,API安全中下载证书和设置密钥。密钥是32位,设置以后需要妥善保管,因为无法查看密钥,所有微信支付相关的接口都会使用这个密钥加密。此处错误会导致调用统一下单接口时返回签名失败。

微信小程序支付接口的实现-3.jpg
2. 微信支付流程:

微信支付有多种支付方式,包括刷卡支付,公众号支付,扫码支付,APP支付,所有微信支付的接口都可以在这里找到:https://pay.weixin.qq.com/wiki/doc/api/index.html 。
小程序是在微信里调起支付的,其实是公众号支付,关于公众号支付的详细文档可以这里找到: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1所有公众号支付相关的链接都可以在此链接找到,开发者首先需要大概了解这些接口。
小程序公众号支付的主要流程如下(本图只考虑了正常流程,异常流程参考公众号支付文档):

微信小程序支付接口的实现-4.jpg

小程序内点击付款后,在后端生成订单,后端获取openId后对订单进行二次封装(包括APP_ID,MCH_ID等内容),将封装信息转成XML格式后进行加密获得签名(Sign)。调用统一下单接口后,微信后台会返回一个XML文件,其中包括:prepay_id(微信生成的预支付会话标识,用于后续接口调用中使用,该值有效期为2小时)。将小程序支付所需要的内容再次封装加密后生成PaySign,然后将生成的参数传递到小程序前端调用wx.requestPayment方法即可。
2.1 关于代码:

下载官方的JAVAsdk包后修改 WXPayRequest.requestOnce()方法,将domain改成微信统一下单的url,也可以直接实现IWXPayDomain接口,实现主备域名自动切换。
  1. HttpClient httpClient = HttpClientBuilder.create()
  2.         .setConnectionManager(connManager)
  3.         .build();
  4. String url = "https://" + domain + urlSuffix;
  5. HttpPost httpPost = new HttpPost(url);
复制代码
流程思路:将订单信息及密钥等信息封装后进行加密签名获得sign,将sign也封装在Map集合当中,转化成XML后使用HTTPSClient转发到微信后台服务器,后台服务器会返回一个XML数据,将XML数据解析后,根据小程序支付所需要参数,进行二次签名,完成后将参数返回到小程序前端即可。
2.2 关于openid

上述流程中请求openid,用的是小程序最新api中的接口,开发者可以查看小程序的登录接口。开发者从第三方服务器获得的openid,在统一下单的接口里面需要使用到。
2.3 关于小程序调起微信支付

上述流程中的小程序调起微信支付,用的是小程序微信支付接口wx.requestPayment,该接口的详细描述可以查看小程序的微信支付API。
这个接口中的package和timeStamp参数是从开发者的第三方服务器返回的,package是第三方服务器从统一下单接口回复中获得。接口中其他的参数,appId,noceStr,signType以及paySign则由小程序这边存储或者计算而得。其中paySign是签名,签名算法文档在这里:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3&t=20161107
整个公众号支付的主要流程基本都是在第三方服务器上实现,开发者需要熟读公众号支付文档,了解消息交互流程以及每个接口。
这里并没有描述正常微信支付必不可少的一些功能:异常处理,查询订单,发起退款,下载对账单等等。
3. 开发过程中的问题:






欢迎光临 云裂变营销网 (https://www.yunliebian.com/yingxiao/) Powered by Discuz! X3.4