Android集成支付宝大全

来源:互联网 发布:8259中断控制实验编程 编辑:程序博客网 时间:2024/04/28 00:02

 现在付费应用都会集成支付宝和微信,本篇主要介绍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);}}}@Overridepublic 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),我们共同探讨。