项目中遇到一个这样的问题,用的是ping++支付,集成了支付宝和微信,支付宝支付是没有问题的,微信界面就是死活调不起,直接就是显示支付失败。
我是这样排查的:
1.微信支付调不起来,微信分享呢?微信分享测试,是没有问题的,说明在微信开发者平台上注册的应用AppID以及签名是没有问题,因为这两项是要配置在shareSdk中的。
2.看到微信开发者平台上的签名以及id,去ping++的开发者平台上验证,配置的微信支付的签名是否有问题,还是没有问题------奇了怪了。
3.配置没有问题,那看具体的代码呢,参照ping++的开发文档,从清单文件到调支付界面的代码,对照着看,有没有配置错?
/**
* 调用第三方支付
*
* @param chargesUrl
*/
private void pay(String chargesUrl) {
Intent intent = new Intent();
String packageName = getPackageName();
ComponentName componentName_WX = new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");
intent.setComponent(componentName_WX);
intent.putExtra(PaymentActivity.EXTRA_CHARGE, chargesUrl);
startActivityForResult(intent, REQUEST_CODE_PAYMENT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//支付页面返回处理
if (requestCode == REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
String result = data.getExtras().getString("pay_result");
Intent intent = new Intent(PayServiceOrderOptionActivity.this, PayResultActivity.class);
intent.putExtra("result", result);
startActivity(intent);
finish();
}
}
}
也是没有问题的。
4.还是得熟悉ping++的支付流程,前端点击支付按钮的时候,选择的有微信还是支付宝,然后往自己服务器发送请求,传递的参数有pay_style(选择的支付方式,支付宝是0 ,微信是2)和trade_no(订单号),然后服务器返回支付信息,然后拿着支付信息再跳转支付。
具体代码如下:
/**
* 结算中心获取订单信息跳转支付
*/
@OnClick(R.id.order_submit)
void submitPay() {
ApiService.getInstance().getPayInfo(selectedPayOption.value, tradeNo).enqueue(new ApiServiceCallback<JsonObject>() {
@Override
public void onSuccessful(JsonObject result) {
if (result != null) {
pay(result.toString());
}
hideProgress();
}
});
}
pay()就是调取的三方支付,一步步调试的时发现,选择支付宝还是微信支付后台返回的result中的信息中有一个字段是channel,调选付宝返回的是“alipay”,选微信返回的竟然是是“alipay_wap”,这是银联的,应该返回“wechat”才对。
5.现在问题明确了,肯定和这相关的,(1)后台返回有误 (2)前端提交的时候传的支付渠道有问题。 最后发现就是前端选择支付方式的时候,支付渠道错了。 改正好,后台返回的数据没问题,微信支付也就能调起了。
选择支付页面是这样的: