首先登陆支付宝开发者平台官网,找到App支付的开发文档。
步骤
- 肯定是申请一个有实名的支付宝账号。
-
他会要求入驻平台
2018-09-04_110012.png
看了下身份说明,应该选择自研开发者就够了,然后就会去完善基本信息
-
然后就去创建一个网页移动应用
2018-09-04_110047.png
编辑应用图标,设置应用公钥(它有专门提供工具),勾选App支付的功能。最后提交审核。注意,如果App的状态
2018-09-04_110100.png处于开发中,或者审核中,应用是无法调用支付功能的,它会返回信息:ISV权限不足,请确认应用已上线。同时,如果App出于未签约状态,它会返回:ISV权限不足,请确认应用已签约。签约的内容大体是同意一些条款跟提醒服务费的问题,审核也很快。
- 最后就是客户端集成。首先去看官方demo。集成的步骤很详细,依赖jar,修改AndroidManifest,添加混淆
- 调用
//增加handler来处理返回的信息
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
};
//创建线程
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。
示例demo中 这样写的
/**
* 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以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;
先是判断是RSA还是RSA2加密算法(官方推荐RSA2),然后去拼接成字符串,用私钥对字符串签名。把appid,私钥,pid填入官方demo中
最后可以得到类似这样的字符串orderinfo,供参考
biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22082913331721164%22%7D&method=alipay.trade.app.pay&charset=utf-8&version=1.0&app_id=2018082761145611×tamp=2016-07-29+16%3A55%3A53&sign_type=RSA2&sign=HsYg8fiws3s5%2FrowuKQVzaQvgJ79FdjNokboQ2EwYUXVnw6jcfQ9as6QYNSIOsuoEKbHxz34At6gPS1qd%2FgPWkmnJ1fFMGx8s0nptY0Ml9DoiKMe6I78ZiOPwQjjjlU7mUCfyMVKz9W179ZwSC63QelE9oXFrfFwr8G%2FBVSaln%2BdIL4KR6xFz3HXp5K2Y2F2SsyXcTYZSzeVW6jRvfVXvynZlC%2BVaW7lyyJcG9Bbn3iUxKwQJ8ZOx%2B9nTm5UzvE%2FsI0LEs%2Bm1EZpjozZnufrG9PhfQUdqA5fRHe%2F37LbMc%2B%2FCNOlgtKG0J4UIbB%2BRyI4B7F5WcheXkuWe19cAtS0bg%3D%3D
一张图概括支付的整体架构
image
网友评论