第二步,拼接符合支付寶規範的請求參數,主要有如下幾點:php
先拼接訂單信息,以下:html
Map<string, string=""> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2); String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
而後並對訂單信息使用私鑰進行RSA加密,並拼接訂單信息:android
String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2); final String orderInfo = orderParam + "&" + sign;
第三步,調用支付api,傳入請求參數進行支付請求:web
// 構造PayTask 對象 PayTask alipay = new PayTask(PayDemoActivity.this); Map<string, string=""> result = alipay.payV2(orderInfo, true);
最後,接收支付結果,根據支付狀態進行UI提示:json
String resultInfo = payResult.getResult();// 同步返回須要驗證的信息 String resultStatus = payResult.getResultStatus(); // 判斷resultStatus 爲「9000」則表明支付成功,具體狀態碼錶明含義可參考接口文檔 if (TextUtils.equals(resultStatus, "9000")) { Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show(); } else { // 判斷resultStatus 爲非"9000"則表明可能支付失敗 // "8000"表明支付結果由於支付渠道緣由或者系統緣由還在等待支付結果確認,最終交易是否成功以服務端異步通知爲準(小几率狀態) if (TextUtils.equals(resultStatus, "8000")) { Toast.makeText(PayDemoActivity.this, "支付結果確認中", Toast.LENGTH_SHORT).show(); } else { // 其餘值就能夠判斷爲支付失敗,包括用戶主動取消支付,或者系統返回的錯誤 Toast.makeText(PayDemoActivity.this, "支付失敗", Toast.LENGTH_SHORT).show(); } }
總體步驟能夠說,和支付寶一致的api
首先,獲取符合微信支付規範的請求參數,demo中是經過一個url獲取的,這告訴咱們,應該讓服務器提供一個接口,來對訂單信息進行加密而後返回。代碼以下:微信
String url = "http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=android"; byte[] buf = Util.httpGet(url);
第二步,對請求參數進行封裝:app
PayReq req = new PayReq(); //req.appId = "wxf8b4f85f3a794e77"; // 測試用appId req.appId = json.getString("appid"); req.partnerId = json.getString("partnerid"); req.prepayId = json.getString("prepayid"); req.nonceStr = json.getString("noncestr"); req.timeStamp = json.getString("timestamp"); req.packageValue = json.getString("package"); req.sign = json.getString("sign"); req.extData = "app data"; // optional
第三步,調用支付api,傳入請求參數:異步
// 在支付以前,若是應用沒有註冊到微信,應該先調用IWXMsg.registerApp將應用註冊到微信 api.sendReq(req);
最後,接收支付結果,根據狀態碼進行UI提示,此處在demo中是在WXPayEntryActivity中進行操做的。
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{ private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity"; private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pay_result); api = WXAPIFactory.createWXAPI(this, Constants.APP_ID); api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.app_tip); builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode))); builder.show(); } } }
銀聯支付最簡單,只要有TN(交易流水號)便可發起支付!
首先,當要進行支付時,調用本身服務器提供的接口獲取流水號,即TN,代碼相似這樣:
String tn = HttpHelper.execGet("tn_url");
而後,拿到TN後,調用銀聯SDK的api向銀聯發起支付請求,代碼相似這樣:
//其中mode參數解釋: "00" - 啓動銀聯正式環境 "01" - 鏈接銀聯測試環境 UPPayAssistEx.startPay(activity, null, null, tn, mode);
最後,在onActivityResult方法中獲取支付結果進行UI提示,代碼相似這樣:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { /************************************************* * 步驟3:處理銀聯手機支付控件返回的支付結果 ************************************************/ if (data == null) { return; } String msg = ""; /* * 支付控件返回字符串:success、fail、cancel 分別表明支付成功,支付失敗,支付取消 */ String str = data.getExtras().getString("pay_result"); if (str.equalsIgnoreCase("success")) { // 若是想對結果數據驗籤,可以使用下面這段代碼,但建議不驗籤,直接去商戶後臺查詢交易結果 // result_data結構見c)result_data參數說明 if (data.hasExtra("result_data")) { // 結果result_data爲成功時,去商戶後臺查詢一下再展現成功 //注意,此處只是表示客戶端收到了支付成功的響應。可是爲了保險起見,須要向服務器查詢一下是否真的支付功。 //具體作法是,讓本身服務器提交一個查詢訂單狀態的接口,若是服務器返回的結果也是支付成功,那麼就真的提示用戶 } msg = "支付成功!"; } else if (str.equalsIgnoreCase("fail")) { msg = "支付失敗!"; } else if (str.equalsIgnoreCase("cancel")) { msg = "用戶取消了支付"; } //進行UI提示 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("支付結果通知"); builder.setMessage(msg); builder.setInverseBackgroundForced(true); // builder.setCustomTitle(); builder.setNegativeButton("肯定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); }