使用支付宝SDK实现移动端APP支付功能,SDK中提供的有一个调用方法,如果订单信息参数有问题就会报错交易订单处理失败:
/** * 支付宝支付业务 * * @param v */ public void payV2(View v) { if (TextUtils.isEmpty(APPID) || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))) { new AlertDialog.Builder(this).setTitle("警告").setMessage("需要配置APPID | RSA_PRIVATE") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { // finish(); } }).show(); return; } /** * 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成; * 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成; * 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险; * * orderInfo的获取必须来自服务端; */ boolean rsa2 = (RSA2_PRIVATE.length() > 0); Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2); String orderParam = OrderInfoUtil2_0.buildOrderParam(params); String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE; String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2); final String orderInfo = orderParam + "&" + sign; Runnable payRunnable = new Runnable() { @Override public void run() { PayTask alipay = new PayTask(PayDemoActivity.this); Map<String, String> result = alipay.payV2(orderInfo, true); Log.i("msp", result.toString()); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; Thread payThread = new Thread(payRunnable); payThread.start(); }
里面的orderInfo是一长串的支付信息,可以APP端生成,也能从后台获取,为了安全期间还是要从后台获取,我这边从后台获取的这一字符串为:
alipay_sdk=alipay-sdk-java-dynamicVersionNo&
app_id=20171226xxxxxxxx&biz_content=业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档&
charset=UTF-8&
format=json&
method=alipay.trade.app.pay&
sign=商户请求参数的签名串,详见签名&
timestamp=2018-06-25+16%3A40%3A50&
version=1.0
直接添加到方法中使用就能调起支付了!如果感觉自己的参数有问题可以以此对照一下(注意字符串的格式)。