转载

怎么在你的App里集成支付宝

没想到现在 App 里集成支付宝是这么的简单,我还折腾了好久…

怎么在你的App里集成支付宝

好了,开始,假设你已经完成了支付宝那些繁杂的申请啥的工作,进入开发了。

首先,去下载官方的 DEMO :

App支付客户端DEMO&SDK 。

导入开发资源

解压后把里面的 jar 包拿出来放到你工程的 lib 目录下,如图

怎么在你的App里集成支付宝

然后进入工程的“Project Structure”,在app module下选择“File dependency”,将libs目录下的alipaySDK-xxxxxxxx.jar导入,或者在app module下的build.gradle下手动添加依赖,如下代码所示:

......
compile files('libs/alipaySdk-20170725.jar')
......

修改 AndroidManifest 文件

复制进去就行

<activity
    android:name="com.alipay.sdk.app.H5PayActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
 <activity
    android:name="com.alipay.sdk.app.H5AuthActivity"
    android:configChanges="orientation|keyboardHidden|navigation"
    android:exported="false"
    android:screenOrientation="behind"
    android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>

声明权限

<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

好了,准备工作基本完成。

支付接口的调用

这里参考下给的 Demo。

由于支付包的 Demo 给的是本地加密的方式,并且不推荐使用这种方法,所以我们只需要用的其中的部分代码就好了。

首先,把 PayResult.java 这个类复制到你的项目里。代码如下:

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;
    }
}

然后调支付接口。PayTask对象主要为商户提供订单支付、查询功能,及获取当前开发包版本号。获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行),

private static final int SDK_PAY_FLAG = 1;
// 订单信息
final String orderInfo = info;   
Runnable payRunnable = new Runnable() {
@Override
    public void run(){
        PayTask alipay = new PayTask(PayDemoActivity.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();

注意下 orderInfo 这个变量,这个值是由通过向后台请求返回的值。

这里需要后台注意的是,写的时候看好 App支付请求参数说明 这个文档。

然后是支付结果的获取与处理。

@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")) {
                    // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                    Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                } else {
                    // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                    Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                }
                break;
            }
            default:
                break;
            }
        };
    };

然后就好了。

结束。

后记

这是第一次接入支付宝支付,一开始还很起劲的参照一个库去进行封装,然后发现好像多此一举,并且还不成功,和后台捯饬了好久然后看Demo才弄出来。

参考:

支付宝支付文档
原文  https://wuzhaohui026.github.io/2018/04/20/怎么在你的App里集成支付宝/
正文到此结束
Loading...