微信小程序> 微信小程序开发之微信支付(四)组合签名(时间戳,随机串)用户确认支付

微信小程序开发之微信支付(四)组合签名(时间戳,随机串)用户确认支付

浏览量:698 时间: 来源:ZXohoo

我使用了这个SDK进行开发

签名算法需要5个参数

小程序

时间戳算法:

/** * 获取时间戳 * 时间戳从1970年1月1日00:00:00至今的秒数 */public static long getTimeStamp() {    Date d = new Date();    long timeStamp = d.getTime() / 1000;     //getTime()得到的是微秒, 需要换算成秒    return timeStamp;}

随机串算法:

/** * 获取32位随机串 */public static String getNonceStr() {    String s = UUID.randomUUID().toString().replace("-","");    return s;}

签名算法:

com.github.binarywang.wxpay.util

/** * 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3). * * @param params         参数信息 * @param signType       签名类型,如果为空,则默认为MD5 * @param signKey        签名Key * @param ignoreSignType 签名时,是否忽略signType * @return 签名字符串 */public static String createSign(MapString, String params, String signType, String signKey, boolean ignoreSignType) {  SortedMapString, String sortedMap = new TreeMap(params);  StringBuilder toSign = new StringBuilder();  for (String key : sortedMap.keySet()) {    String value = params.get(key);    boolean shouldSign = false;    if (ignoreSignType && "sign_type".equals(key)) {      shouldSign = false;    } else if (StringUtils.isNotEmpty(value)      && !Lists.newArrayList("sign", "key", "xmlString", "xmlDoc", "couponList").contains(key)) {      shouldSign = true;    }    if (shouldSign) {      toSign.append(key).append("=").append(value).append("&");    }  }  toSign.append("key=").append(signKey);  if (SignType.HMAC_SHA256.equals(signType)) {    return createHmacSha256Sign(toSign.toString(), signKey);  } else {    return DigestUtils.md5Hex(toSign.toString()).toUpperCase();  }}

前端需要wx.requestPayment{}发起支付。

怎样自动填写参数呢?

我们使用freemarker进行参数的动态注入

在依赖文件中添加

                 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-freemarker/artifactId/dependency

以调用统一接口为例

/** * 发起与支付 * 调用统一下单接口,获取“预支付交易会话标识” */@PostMapping("/unifiedOrder")public ModelAndView unifiedOrder(@RequestBody String orderId,                                 @RequestBody HttpServletRequest request,                                  MapString, Objectmap) throws WxPayException {    OrderDTO orderDTO = orderService.findOne(orderId);    WxPayUnifiedOrderRequest orderRequest = payService.create(orderDTO, request);    WxPayUnifiedOrderResult orderResult = wxPayService.unifiedOrder(orderRequest);    map.put("orderRequest", orderRequest);    map.put("orderResult", orderResult);    map.put("timeStamp", payUtil.getTimeStamp());    map.put("nonceStr", payUtil.getNonceStr());    return new ModelAndView("pay/unifiedOrder", map);}
wx.requestPayment(        {            'timeStamp': '${timeStamp}',            'nonceStr': '${nonceStr}',            'package': '${orderResult.prepayId}',            'signType': 'MD5',            'paySign': '',            'success':function(res){},            'fail':function(res){},            'complete':function(res){}        })

创建unifiedOrder.ftl文件。使用${}进行参数注入

讲的不太详细 ModelAndView可以参考这里学习

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎