項目中遇到一個這樣的問題,用的是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)前端提交的時候傳的支付渠道有問題。 最後發現就是前端選擇支付方式的時候,支付渠道錯了。 改正好,後臺返回的數據沒問題,微信支付也就能調起了。
選擇支付頁面是這樣的: