nvidia验证程序加载失败_微信小程序支付踩的坑(支付验证签名失败)

e19a09d1509fd3c92c28c5762004a1ec.gif

点击箭头处“巧叹”,关注我哦!!

最近有需求是微信小程序支付,用的是微信自带的sdk,曾做过微信APP支付,微信扫用户码支付,都是OK的,现在把做微信小程序支付流程写下来,还有在调用过程踩的坑,下面为步骤
一.先查看API

地址: https://pay.weixin.qq.com/wiki/doc/api/index.html69aaf4c58fcdc66739dc337aea5e74aa.png我是后端的,前端调用是用我们返回的值
地址: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1e688bf33450d29b951912737e8a51bb5.png查看api可以知道我们需要的值,其他的还好说,其中有一个需要特别注意一下:刚好小程序的trade_type就是JSAPI1aa17d7f25a80b9ca78bfa096ffdde8b.png

二.查看流程图

开始我以为这个前端来传就可以了,后来前端也说他只能获得一个登录code,于是我看了流程:6cc1763ff386fed65a64db68529d8af2.png

三.获取openid

那就我们来获取openid吧,后端还比较安全,于是我找到了这个地址:
地址: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html具体调用如下代码:

//拼成get方式的请求体String params = "appid=" + tParamPayment.getApp_id() + "&secret=" + tParamPayment.getPay_key() + "&js_code=" + authcode + "&grant_type="                    + Consts.GRANT_TYPE;String responseContent = WXPayRequest.sendGet(Consts.GET_OPENID_URL, params);Map mSepRet = gson.fromJson(responseContent, Map.class);logger.info("get openid:" + gson.toJson(mSepRet));if (null == mSepRet.get("openid")) {//自定义错误return ResultUtil.error(PltResult.RESULT_PA36.getpCode(), PltResult.RESULT_PA36.getpName());}String openid = (String) mSepRet.get("openid");//注:appid是小程序appid,秘钥是小程序的appSecretpublic static String GET_OPENID_URL = "https://api.weixin.qq.com/sns/jscode2session";//请求地址public static String GRANT_TYPE = "authorization_code";//grant_type:固定的
四.调用统一下单接口(防坑)

放上微信的SDK,做了简单改动,更贴近现实开发
链接:https://pan.baidu.com/s/1AEpdsXyVzcFvXXrOpJeFug提取码:9bif
然后我在调用接口的时候也发现是没问题的,代码如下:

Map parameters = new HashMap();MyConfig config = new MyConfig(tParamPayment.getMerchant_key(), tParamPayment.getMerchant_id(), tParamPayment.getApp_id());WXPay wxpay = new WXPay(config);parameters.put("body", "根据实际情况填写");// 商品详情parameters.put("nonce_str", WXPayUtil.generateNonceStr());parameters.put("out_trade_no", "根据实际情况填写" ); parameters.put("spbill_create_ip", "127.0.0.1");// 调用微信支付API的机器IPparameters.put("total_fee", ordamt);// 总额parameters.put("openid", openid);// 上面获取的openidparameters.put("notify_url", tParamPayment.getNotify_url());// 回调地址parameters.put("trade_type", "JSAPI");// 类型String sign = WXPayUtil.generateSignature(parameters, tParamPayment.getMerchant_key());parameters.put("sign", sign);// 签名 logger.debug("wxpay request:" + gson.toJson(parameters));Map resXmlMap = wxpay.unifiedOrder(parameters);logger.debug("wxpay response:" + gson.toJson(resXmlMap));if (Consts.SUCCESS.equals(resXmlMap.get("return_code")) && Consts.OK.equals(resXmlMap.get("return_msg"))) {Map payparamsMap = new HashMap();Date currDate = new Date();    long timestamp = currDate.getTime() / 1000;    payparamsMap.put("appId", tParamPayment.getApp_id());    payparamsMap.put("package", "prepay_id=" + resXmlMap.get("prepay_id"));    payparamsMap.put("timeStamp", timestamp + "");    payparamsMap.put("nonceStr", WXPayUtil.generateNonceStr());//     payparamsMap.put("signType", WXPayConstants.MD5);String newSign = WXPayUtil.generateSignature(payparamsMap, tParamPayment.getMerchant_key());    payparamsMap.put("paySign", newSign);    logger.debug("response data:" + gson.toJson(payparamsMap));    returnParam.put("payparams", payparamsMap);//注:MyConfig config = new MyConfig("商户秘钥", "商户id", "小程序appid");}

值也得获取了:下面这些值8a8d9c47e1637d86a502a2d45c1f2304.png然后小程序的同事告诉我签名错误。78f8b5f202340fe4c7e09e55cbeeecda.png

我们把获取的值用MD5加密了一下,发现加密也是没问题的,那真是很奇怪。后来想到是不是在调用微信拿这些值的时候出了什么错,但是微信为什么能通过呢,这就是微信最大坑的地方了wxpay.unifiedOrder(parameters)中的unifiedOrder方法进去以后是这个635f3cb02f56f9302438756fc06da5e6.png再点进去是这个204834aa47ed6ad2680313dfe8f120c6.png其中:注意行数5b96cba8628cf534bc451526b79edd55.pngMD5用的是在沙箱环境下我们改一下b91dddd29925ee2b64cc979a42399130.png搞定把值返回给前端,可以调起微信支付

be5afcccd550132398bd523e52d88721.png

微信还是挺坑的,但是我们要自己提高适应,我看了好多网上的调用,改了好多都不行,也有传加密方式的,我都试过不行,希望这个博文可以帮助还在微信小程序坑里的人

5bc2af727d8443ad37f30ffecde735e1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值