微信支付-商户后台(4)

时间:2022-12-01 17:24:47

今天终于把关于微信的后台以及调试都整好了,不可谓不艰辛啊~~

最终的完整代码,请查看我的github,直接git,修改config中的APP_ID,MCH_ID以及MCH_SECRET就可以运行了。

简单说一下代码中包含的内容:1. 统一下单功能,2. 支付结果通知接口;3. 支付结果查询功能;4. 沙盒仿真系统测试代码

关于沙盒仿真系统的测试说明一下:在调用仿真系统接口之前,需要先调用沙盒signkey接口,获取签名key,也就是用这个key代替我们真实的MCH_SECRET来调用仿真系统,具体的工作过程见如下代码:

parm.put("sign", PayUtil.getSign(parm, API_KEY)); // 签名
// 对接仿真系统测试
API_KEY = null;
getSandParams(parm);
parm.remove("sign");
parm.put("sign", PayUtil.getSign(parm, API_KEY)); // 再签名
...
/**
* 获取仿真系统的签名
*
* @param parm
* @throws XmlPullParserException
* @throws IOException
*/

public static void getSandParams(Map<String, String> parm) throws XmlPullParserException, IOException {
Map<String, String> sandParm = new HashMap<String, String>();
sandParm.put("mch_id", ConstValue.MCH_ID);
sandParm.put("nonce_str", parm.get("nonce_str"));
sandParm.put("sign", parm.get("sign"));
String sandRestxml = HttpUtils.post(ConstValue.SANDBOX_SIGN, XmlUtil.xmlFormat(parm, false));
Map<String, String> sandRestmap = null;
sandRestmap = XmlUtil.xmlParse(sandRestxml);
if (null == API_KEY) {
API_KEY = sandRestmap.get("sandbox_signkey");
}
}

微信支付-商户后台(4)

对接仿真系统时,只有在统一下单时使用了一次真实的签名key值,其他时候都是用沙盒签名url获取得到的key值:

public static final String SANDBOX_SIGN = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"; // 仿真系统获取签名的URL

另外,对接仿真系统,需要将所有的访问URL路径中增加sandboxnew以对接仿真系统数据:

    public static final String ORDER_PAY = "https://api.mch.weixin.qq.com/sandboxnew/pay/unifiedorder"; // 统一下单

public static final String ORDER_PAY_QUERY = "https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery"; // 支付订单查询

沙盒仿真系统测试通过之后,就可以使用APP对接商户后台来对接真实环境测试了,我这里将支付金额都置为0.01元来测试。在APP对接测试的时候,需要注意这个问题:

获取订单成功,但是调用微信支付时,mIWXAPI.sendReq(request);已经返回了true,但是
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
Intent intent = new Intent(UuidAndBroadcastFilter.ACTION_PAY_SUCCESS_RESULT);
intent.putExtra("payErrorCode", resp.errCode);
sendBroadcast(intent);
finish();
}
}

返回的支付结果一直为-1,而且根本没有调起来微信支付界面,且没有任何可参考的错误提示。。。

最后通过大神的指点,我发现了问题:1. APP支付不能使用debug模式调试,debug模式调不起来微信界面的,也就是必须打包正式版来调试;2. 保证你的微信APP信息中的签名与你安装在手机中的应用签名一致:
微信支付-商户后台(4)
可以使用微信提供的签名工具app来获取软件的签名, 下载地址

以上就是整个商户后台的开发、调试和测试过程,最后附上该工程的github地址:

https://github.com/shangXiaoM/WXPayHost