目前,公司正在把业务从公众号向小程序迁移,本人负责订单功能的开发,现在把微信小程序接入微信支付这块的知识分享给大家,可能有部分人对微信支付不太了解,可以参考下面的微信支付流程图。
微信支付流程图
我是用weixin-java-tools这个开源框架做的,目前这个开源社区还很活跃,有兴趣的朋友可以研究一下。weixin-java-tools微信支付功能集成如下:
登录小程序平台设置常用的配置,request合法域名,uploadFile合法域名,downloadFile合法域名。
2.小程序开通微信支付功能,微信支付用到微信支付商户号,支付证书。
3.引入maven坐标
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId><version>3.2.0</version></dependency>
4.调用微信统一下单接口,我这里贴出关键代码。
@RequestMapping(value="/unifiedOrder/{appId}")public JSONObject unifiedOrder (@RequestBody JSONObject inData,@PathVariable String appId){String openId = inData.getString("openId");//微信用户openIdString tradeNo = inData.getString("tradeNo");//订单编号Integer totalFee = inData.getInteger("orderPrice");//商品价格,单位为分String body = inData.getString("body"); //商品名称String ip = inData.getString("ip");//客户端ip String notifyUrl = environment.getProperty("spring."+appId+".notifyUrl");//微信回调业务接口地址WxPayUnifiedOrderRequest prepayInfo = new WxPayUnifiedOrderRequest();long now = System.currentTimeMillis();String nowStr = String.valueOf(now);int length = nowStr.length();String current = nowStr.substring(length-5,length);prepayInfo.setOpenid(openId);prepayInfo.setTradeType("JSAPI");prepayInfo.setTotalFee(totalFee);prepayInfo.setBody(body);prepayInfo.setSpbillCreateIp(ip);prepayInfo.setOutTradeNo(tradeNo+"|"+current);prepayInfo.setNotifyUrl(notifyUrl);JSONObject jsObj = new JSONObject();try {final WxPayService payService = WeixinServiceFactory.getWxPayService(appId,environment);Object payInfo = payService.createOrder(prepayInfo);jsObj.put("code", ResponseCodeEnum.RESPONSE_CODE_SUCCESS.getCode());jsObj.put("message",ResponseCodeEnum.RESPONSE_CODE_SUCCESS.getMessage());jsObj.put("data", payInfo);} catch (WxPayException e) {logger.error("创建订单支付信息,出现异常",e);jsObj.put("code", ResponseCodeEnum.RESPONSE_CODE_INTERNAL_ERROR.getCode());jsObj.put("message",ResponseCodeEnum.RESPONSE_CODE_INTERNAL_ERROR.getMessage());}return jsObj
接口返回数据格式如下:
{"code": 200,"data": {"appId": "12123123123123",//微信小程序appid"timeStamp": "1559713220",//当前时间戳"nonceStr": "1559713220240",//随机字符串"packageValue": "prepay_id=wx01231231231231230",//prepay_id为预支付交易会话标识"signType": "MD5",//支付签名方式"paySign": "213213123123"//支付签名},"message": "SUCCESS"}
4.小程序页面发起微信支付请求,参数为第三步返回的参数
wx.requestPayment({"appId": 'wx00000000000000',//小程序appId"timeStamp": "",//当前时间戳 "nonceStr": "",//随机字符串"package": "",//预支付交易会话标识 取接口返回端的packageValue字段"signType": "","paySign":"",//小程序微信支付成功的回调通知 'success': function (res) {},//小程序支付失败的回调通知 'fail': function (res) {} }) }
5.微信支付平台异步回调业务接口,修改订单支付状态