安卓 --- 集成支付宝

本文集成的支付宝是基于 订单是自己后台服务器生成的!!!!

主要参照 Walter_Mr 的博文 http://blog.csdn.net/wtt945482445/article/details/52330250

1,首先公司会给你申请好账号,然后你去控制台创建应用,如下图:

a,



b,创建


c,


配置应用信息:



配置签名:(我采用的是官方推荐的RSA2(SHA256)密钥)



支付宝官方提供了密钥生成工具 和验证工具 可以自行下载:




官方demo下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1



2,获取服务器订单,这里和平常的接口通信没什么区别。
Ps:如果订单有问题在调起支付宝客户端的时候会报Ali38173等错误

3,拷贝demo中的方法去调用支付宝客户端(payInfo是订单String)
/**
     *  调起支付宝的方法
     * @param payInfo 订单
     */
    private void select2AliaPay(final String payInfo){
        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                //调用支付宝
                PayTask payTask = new PayTask(这里是上下文);
                Map<String, String> result = payTask.payV2(payInfo, true);
                ULog.e(TAG,"result = " + result);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

Ps:这里payTask类有两个pay方法,payV2是返回一个map,pay方法返回一个String
因为官方demo中的解析是解析的map,我直接copy过来用的,所以这里我用了 payV2方法



上面的这个是解析的实体类。

4,最后是客户端的同步回调,在handler中处理,支付宝官网提醒应该依据服务器的异步回调为准

@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();
				System.out.println(resultStatus);
				// 判断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;
			}
			default:
				break;
			}
		};
	};





猜你喜欢

转载自blog.csdn.net/MelvinCen/article/details/66973050