支付宝支付功能

 

一、网络安全:

二、参考支付宝开发平台

1、进入支付宝开发平台,注册账号并登录

2、登陆成功后,点击管理中心创建应用(注意命名规范)

3、点击应用信息下的应用环境,设置公钥

public class MainActivity extends Activity implements OnClickListener{

    private static final int SDK_PAY_FLAG = 1;

    private Button btnAlipay;

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case SDK_PAY_FLAG: {
                PayResult payResult = new PayResult((String) msg.obj);
                /**
                 * 同步返回的结果必须放置到服务端进行验证,建议商户依赖异步通知
                 */
                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;
            }
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView(){
        btnAlipay = (Button) findViewById(R.id.btn_alipay);
        btnAlipay.setOnClickListener(this);
    }
    /**
     * 支付宝支付异步任务
     * @author Kylin
     */
    private class AliPayThread extends Thread {
        @Override
        public void run() {
            String result = AlipayAPI.pay(MainActivity.this, "测试的商品", "测试商品的详细描述", "0.01"); 
            Message msg = new Message();
            msg.what = SDK_PAY_FLAG;
            msg.obj = result;
            mHandler.sendMessage(msg);
        }
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.btn_alipay:
            // 使用支付宝进行支付
            new AliPayThread().start();
            break;

        default:
            break;
        }
    }
}

 点击支付按钮之后,创建一个子线程执行支付操作,调用AlipayAPI.pay()方法进行支付,返回result之后通知Handler进行处理,取出resultStatus参数判断支付是否成功

resultStatus:9000成功,8000支付确认中,其他支付失败

 可以通过getOrderInfo方法创建订单,其实就是按照支付宝规定的格式封装性赢得数据,封装完后使用sign()方法对其签名,然后用UTF-8对sign进行编码。

注意:这个一般在服务器进行,客户端进行获取封装好的信息

然后调用PayTask接口

                    Runnable payRunnable = new Runnable() {
                        @Override
                        public void run() {
                            PayTask alipay = new PayTask(ChargeActivity.this);
                            checkRresult = alipay.pay(payInfo, true);
                            Message msg = new Message();
                            msg.what = WHAT_ALIPAY_SUCCESS;
                            msg.obj = checkRresult;
                            handler.sendMessage(msg);
                        }
                    };
                    Thread payThread = new Thread(payRunnable);
                    payThread.start();

 

posted @ 2015-12-02 13:24  ChHM  阅读(290)  评论(0编辑  收藏  举报