记支付宝支付接入过程

首先登陆支付宝开发者平台官网,找到App支付的开发文档。

步骤

  1. 肯定是申请一个有实名的支付宝账号。
  2. 他会要求入驻平台


    2018-09-04_110012.png

看了下身份说明,应该选择自研开发者就够了,然后就会去完善基本信息

  1. 然后就去创建一个网页移动应用


    2018-09-04_110047.png

编辑应用图标,设置应用公钥(它有专门提供工具),勾选App支付的功能。最后提交审核。注意,如果App的状态

2018-09-04_110100.png

处于开发中,或者审核中,应用是无法调用支付功能的,它会返回信息:ISV权限不足,请确认应用已上线。同时,如果App出于未签约状态,它会返回:ISV权限不足,请确认应用已签约。签约的内容大体是同意一些条款跟提醒服务费的问题,审核也很快。

  1. 最后就是客户端集成。首先去看官方demo。集成的步骤很详细,依赖jar,修改AndroidManifest,添加混淆
  2. 调用
//增加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) 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 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 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

你可能感兴趣的:(记支付宝支付接入过程)