美文网首页
支付宝支付简介

支付宝支付简介

作者: 3Q竹林 | 来源:发表于2017-06-06 10:41 被阅读46次
    支付宝支付

    具体实现代码如下:

    public void requestPay() {
    
        //请求网络获取预订单authInfo(信息已经过服务器签名,这就要求服务器端也需要集成alipay的sdk才能实现)。。。
    
            final String authInfo = info + "&" + sign;
                Runnable authRunnable = new Runnable() {
                    @Override
                    public void run() {
                        // 构造AuthTask 对象
                        AuthTask authTask = new AuthTask(PayDemoActivity.this);
                        // 调用授权接口,获取授权结果
                        Map<String, String> result = authTask.authV2(authInfo, true);
    
                        Message msg = new Message();
                        msg.what = SDK_AUTH_FLAG;
                        msg.obj = result;
                        mHandler.sendMessage(msg);
                    }
                };
    
                // 必须采用异步调用
                Thread authThread = new Thread(authRunnable);
                authThread.start();
    }
    
        @SuppressLint("HandlerLeak")
        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")) {
                    // 该笔订单是否真实支付成功,需要依赖服务端的异步通知,或直接都使用后台的结果数据
                    requestResult();
                } else {
                    // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                    Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                }
                break;
            }
            case SDK_AUTH_FLAG: {
                @SuppressWarnings("unchecked")
                AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
                String resultStatus = authResult.getResultStatus();
    
                // 判断resultStatus 为“9000”且result_code
                // 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
                if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
                    // 获取alipay_open_id,调支付时作为参数extern_token 的value
                    // 传入,则支付账户为该授权账户
                    Toast.makeText(PayDemoActivity.this,
                            "授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT)
                            .show();
                } else {
                    // 其他状态值则为授权失败
                    Toast.makeText(PayDemoActivity.this,
                            "授权失败" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();
                }
                break;
            }
            default:
                break;
            }
        };
    };
    

    验证:在返回数据resultStatus为9000的情况下,解析result结果:
    1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
    2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
    3、校验通知中的seller_id(或seller_email) 是否为out_trade_no这笔单据对应的操作方(有时,一个商户会有多个seller_id/seller_email);
    4、验证app_id是否为该商户本身。上述1、2、3、4有任何一个验证不通过,则表明同步校验结果是无效的,否则认定买家付款不成功。
    简单做法:完全依赖服务端异步通知,直接调用后台的结果接口;

    补充:

    /**
     * get the sdk version. 获取SDK版本号(若需要)
     * 
     */
    public void getSDKVersion() {
        PayTask payTask = new PayTask(this);
        String version = payTask.getVersion();
        Toast.makeText(this, version, Toast.LENGTH_SHORT).show();
    }  
    

    格外提醒:
    微信需要配置应用签名:d7a7a6a72b7627be785495b6b842dda8
    支付宝需要配置密钥(公钥)
    官网地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.DJdm6Z&treeId=204&articleId=106079&docType=1

    .

    相关文章

      网友评论

          本文标题:支付宝支付简介

          本文链接:https://www.haomeiwen.com/subject/dcjgfxtx.html