一. 第三方支付开放接口
1. 支付宝
面向用户: 支付宝、微信
面向企业: 连连支付、东方支付
2. 官网
3. 请求参数说明
4. 支付宝集成
1) 安全
哪些参数需要从服务端获取
a) 订单号
b) RSA私钥
优化后:客户端向服务端传参数包括商品id + 价格
服务端构造完整的符合支付宝参数规范的订单信息
5. 使用OpenSSL生成公钥私钥
支付宝钱包支付接口开发包2.0标准版(20160516)\DEMO\openssl
6. 其他的支付接口
1) Bmob
客户端只要cp一下代码,就可以实现支付宝快捷支付了:
public class MainActivity extends Activity { private static final int SDK_PAY_FLAG = 1;public void btnpay(View v) {
String url="可变地址"; Map<String, String> params=new HashMap<String, String>(); params.put("product_id", "10101"); params.put("price", "101元"); // TODO Auto-generated method stub HTTPUtils.get(this, url, params, new ResponseListener() { @Override public void onResponse(String arg0) { // TODO Auto-generated method stub if(TextUtils.isEmpty(arg0)) { alipay(arg0); } }@Override
public void onErrorResponse(VolleyError arg0) { // TODO Auto-generated method stub } }); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }private void alipay(String arg0) {
final String payInfo ="partner='2088101568358171'&seller_id='xxx@alipay.com'&out_trade_no='0819145412-6177'&subject='测试'&body='测试测试'&total_fee='0.01'¬ify_url='http://notify.msp.hk/notify.htm'&service='mobile.securitypay.pay'&payment_type='1'&_input_charset='utf-8'&it_b_pay='30m'&sign='lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D'&sign_type='RSA'"; new Thread() { @Override public void run() { // 构造PayTask 对象 PayTask alipay = new PayTask(MainActivity.this); // 调用支付接口,获取支付结果 String result = alipay.pay(payInfo, true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }.start();; }private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((String) msg.obj); /** * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/ * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665& * docType=1) 建议商户依赖异步通知 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档 if (TextUtils.equals(resultStatus, "9000")) { Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_SHORT).show(); } else { // 判断resultStatus 为非"9000"则代表可能支付失败 // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态) if (TextUtils.equals(resultStatus, "8000")) { Toast.makeText(MainActivity.this, "支付结果确认中", Toast.LENGTH_SHORT).show();} else {
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误 Toast.makeText(MainActivity.this, "支付失败", Toast.LENGTH_SHORT).show();}
} break; } default: break; } };};}