字符串來進(jìn)行提交的,因?yàn)?/font>JSON字符串可以傳遞一個長度不確定的List對象。
2、服務(wù)器返回支付憑證Charge給APP。(這里需要了解的是,服務(wù)器端也需要進(jìn)行支付的相關(guān)開發(fā))支付憑證Charge是一個有一定格式的JSON字符串,
3、APP在拿到支付憑證之后,利用支付SDK的相關(guān)API發(fā)起支付請求。如下所示,代碼在官方文檔中有說明:
/**
* 發(fā)起ping++SDK進(jìn)行支付
*
* @param createOrderRespMsg
*/
private void pay(CreateOrderRespMsg createOrderRespMsg) {
Intent intent = new Intent();
String packageName = getPackageName();
ComponentName componentName = newComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");
intent.setComponent(componentName);
intent.putExtra(PaymentActivity.EXTRA_CHARGE, JSONUtil.toJSON(createOrderRespMsg.getData().getCharge()));
startActivityForResult(intent, Constants.REQUEST_CODE_PAYMENT);
}
4、支付SDK把支付的結(jié)果(包括成功,失敗,相關(guān)支付APP沒有安裝,用戶取消了支付)返回給APP,代碼如下:
/**
* 支付結(jié)果通知
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//支付頁面返回處理
if (requestCode == Constants.REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
String result = data.getExtras().getString("pay_result");
if (result.equals("success")) {
changeOrderStatus(Constants.PAY_SUCCESS);//修改訂單狀態(tài)
} else if (result.equals("fail")) {
changeOrderStatus(Constants.PAY_FAILED);
} else if (result.equals("cancel")) {
changeOrderStatus(Constants.PAY_CANCEL);
} else if (result.equals("invalid")) {
changeOrderStatus(Constants.PAY_INVALID);
}
}
}
}
5、APP根據(jù)支付SDK返回的結(jié)果去向自己的服務(wù)器請求,相應(yīng)地修改訂單狀態(tài)(例如修改為已付款)。
6、最后由服務(wù)器端返回給客戶端修改是否成功等信息,提示用戶操作是否成功等。
7、清空購物車中已經(jīng)購買的商品。