Android集成支付宝大全

 现在付费应用都会集成支付宝和微信,本篇主要介绍Android 应用怎么集成支付宝,结合我做的《紫禁城》项目,现将客户端代码分享如下。

思路: 1.到支付宝开放平台下载jar包,申请私钥和公钥。

            2.把订单发给自己服务器加密

            3.把服务器返回的加密后的orderInfo订单信息,调支付宝jar包发给支付宝服务器

正常情况下:1.如果手机已经安装过支付宝客户端,就回直接调起支付宝支付界面,如果未安装支付宝客户端就回调起网页收银台,进行支付。

警告!!!如果你项目用过AES加密,就回出现,网页收银台调出来的情况,具体Bug变现为,网页收银台一闪而过,支付失败,而安装客户端的就没事。

第一种 未安装支付宝客户端,且网页收银台调不起来:

处理方法:如果未安装支付宝客户端就给一个重提示就好。

先判断是否安装支付宝客户端

 

/**
     * 获取是否安装支付宝客户端
     */
    public static boolean checkAliPayInstalled(Context context) {

        Uri uri = Uri.parse("alipays://platformapi/startApp");
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        ComponentName componentName = intent.resolveActivity(context.getPackageManager());
        return componentName != null;
    }
第二 安装支付宝客户端


  1.0  条件jar包

   2.0 拷贝支付结果bean

public class PayResult {
	private String resultStatus;
	private String result;
	private String memo;

	public PayResult(Map<String, String> rawResult) {
		if (rawResult == null) {
			return;
		}

		for (String key : rawResult.keySet()) {
			if (TextUtils.equals(key, "resultStatus")) {
				resultStatus = rawResult.get(key);
			} else if (TextUtils.equals(key, "result")) {
				result = rawResult.get(key);
			} else if (TextUtils.equals(key, "memo")) {
				memo = rawResult.get(key);
			}
		}
	}

	@Override
	public String toString() {
		return "resultStatus={" + resultStatus + "};memo={" + memo
				+ "};result={" + result + "}";
	}

	/**
	 * @return the resultStatus
	 */
	public String getResultStatus() {
		return resultStatus;
	}

	/**
	 * @return the memo
	 */
	public String getMemo() {
		return memo;
	}

	/**
	 * @return the result
	 */
	public String getResult() {
		return result;
	}
}

3.0支付宝具体业务代码
传入后台加密后的订单字符串  orderInfo
/** 把支付信息传给支付宝的jar完成支付 */
    private void alipay(final String orderInfo) {
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {

                PayTask alipay = new PayTask(SubscribeActivity.this);
                Map<String, String> result = alipay.payV2(orderInfo, true);

                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };

        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

    private static final int SDK_PAY_FLAG = 1;

    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    // TODO 真实开发这里应该是发请求问服务器支付结果,以服务器的结果为准

                    @SuppressWarnings("unchecked")
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    /**
                     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
//                    Log.i("resultInfo",payResult.toString());
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
//                        Log.i("paysult:",resultStatus);
                        Toast.makeText(SystemUtil.getApplication(), "支付成功", Toast.LENGTH_SHORT).show();
                        //购买成功提示;
                        showSuccess();
                        //友盟统计,完成购买;
                        UMengManager.getInstance().postEvent("完成购买");
                        //送通知给书架界面,订阅界面购买了期刊完成;
                        EventBus.getDefault().post(new FormatPreviewActivity.PaySuccess());
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        Toast.makeText(SystemUtil.getApplication(), "支付失败", Toast.LENGTH_SHORT).show();
//                        Log.i("paysult:",resultStatus);
                    }
                    break;
                }
            }
        }
    };
自己服务器 返回的 orderInfo 实例
payInfo :: app_id=2016122802456724&biz_content={"out_trade_no":"729","total_amount":"40.00","subject":"《紫禁城》二〇一五年二月号",
"timeout_express":"90m","product_code":"QUICK_MSECURITY_PAY", 
"seller_id":"2088521512710242"}&charset=utf-8&format=json&method=alipay.trade.app.pay¬ify_url=http://news.ccollector.com:8080/
NesSubscription/zfb/notify_url.jsp&sign_type=RSA×
tamp=2017-04-0512:17:39&version=1.0&sign=ZCIhbT%2BG3wkp8b4BeqHG987Vq1jub2D8Ua1q1QZPWmno9Omk5%2BjLCXn6aC5ZHoH8Ql

如果有什么疑问加我QQ(1915404346),我们共同探讨。









  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值