- 34
- 0
在做刷卡支付的时候,正式的环境可以正常返回(敏感信息已经修改):
Pay Result:{nonce_str=IcVsdgs22Fsz46s, appid=wx53c4sd87dcdc, sign=9B7AE9DD7sdfs126FC3CC095, err_code=USERPAYING, return_msg=OK, result_code=FAIL, err_code_des=需要用户输入支付密码, mch_id=1485757572, return_code=SUCCESS}
但是沙箱环境一直报错,返回结果如下:
Pay Result:{return_msg=沙箱验证签名失败,请确认沙箱签名key是否正确(通过getsignkey调用生成), return_code=FAIL}
说一下我做的这个流程吧
-
判断当前是否是沙箱环境; 如果是正式环境,那么就直接使用在商户平台上的设置的
Key来生成支付请求需要的sign; 如果是沙箱环境, 则先到https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey去请求sandbox_signkey, 使用请求到的sandbox_signkey来替代在商户平台上的设置的Key来生成请求需要的sign,主要代码如下(其中的方法调用retrieveSandboxSignKey代码也贴在后面了):WXPayConfigImpl config = WXPayConfigImpl.getInstance(); Boolean useSandbox = Boolean.valueOf(WxPropertiesUtil.getProperty("use_sandbox")); String key; if (useSandbox) { String sandboxSignkey = config.retrieveSandboxSignKey(config, wxPay); if (StringUtils.isBlank(sandboxSignkey)) { return ResponseObject.createErrorWithMessage("请求沙箱sandbox_signkey失败"); } key = sandboxSignkey; } else { key = config.getKey(); } String sign = WXPayUtil.generateSignature(reqData, key, SignType.MD5); reqData.put("sign", sign); //... Map<String, String> result = wxPay.microPay(reqData); log.info("Pay Result:" + result.toString()); -
获取沙箱密钥的代码如下
public String retrieveSandboxSignKey(WXPayConfig config, WXPay wxPay) { try { Map<String, String> params = new HashMap<String, String>(); params.put("mch_id", config.getMchID()); params.put("nonce_str", WXPayUtil.generateNonceStr()); params.put("sign", WXPayUtil.generateSignature(params, config.getKey())); String strXML = wxPay.requestWithoutCert("https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey", params, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs()); if (StringUtils.isBlank(strXML)) { return null; } Map<String, String> result = WXPayUtil.xmlToMap(strXML); log.info("retrieveSandboxSignKey:" + result); if ("SUCCESS".equals(result.get("return_code"))) { return result.get("sandbox_signkey"); } return null; } catch (Exception e) { log.error("获取sandbox_signkey异常", e); return null; } }
我不知道这个逻辑有没有问题,官方的文档中没有说明这个沙箱key应该怎么使用,自己在往上查的; 各位大佬,帮忙看一下这个问题, 万分感谢
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
