1. 程式人生 > >一分鐘整合支付寶(安卓)

一分鐘整合支付寶(安卓)

背景:

     專案中需要整合支付寶支付。支付寶官方有整合指導,網上也有一些指導文件,但是總是感覺有些囉嗦,所以整理一片極簡對接指導文件,目的在於立刻完成支付寶整合。(至於高階玩法,請參考官方文件)

整合步驟(直接上程式碼):

關鍵程式碼MainActivity.java,(含呼叫支付寶支付和處理支付結果),完整程式碼見附錄github地址:

package com.jmcnsoft.tools.alipay.demo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;

import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private static String TAG = "MainActivity";
    private final Handler handler = new InnerHandler(this);
    private static final int ALIPAY_RESULT = 1;
    /**
     * 支付寶支付成功返回碼
     */
    public static String ALIPAY_SUCCESS = "9000";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v(TAG, "onCreate");
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String orderInfo = "";//支付的關鍵字串,來自自己伺服器返回資訊
                gotoAliPay(MainActivity.this, orderInfo, handler);
            }
        });

    }

    private static class InnerHandler extends MyHandler<Activity> {

        InnerHandler(MainActivity activity) {
            super(activity);
        }

        @Override
        public void handle(Activity activity, Message msg) {
            if (msg.what == ALIPAY_RESULT) {
                handleAliPayResult((MainActivity) activity, msg.obj);
            }
        }
    }

    /**
     * 呼叫支付寶支付
     * @param activity
     * @param orderInfo
     * @param handler
     */
    public void gotoAliPay(final Activity activity, final String orderInfo, final Handler handler) {
        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                PayTask payTask = new PayTask(activity);
                Map<String, String> result = payTask.payV2(orderInfo, true);

                Message msg = new Message();
                msg.what = ALIPAY_RESULT;
                msg.obj = result;
                handler.sendMessage(msg);
            }
        };

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

    /**
     * 處理支付返回結果
     * @param activity
     * @param msgObj
     */
    public static void handleAliPayResult(MainActivity activity, Object msgObj) {
        if (msgObj == null) {
            Toast.makeText(activity, "支付失敗", Toast.LENGTH_SHORT).show();
            return;
        }
        PayResult payResult = new PayResult((Map<String, String>) msgObj);
        String resultInfo = payResult.getResult();
        String resultMemo = payResult.getMemo();
        String resultStatus = payResult.getResultStatus();
        boolean isSuccess = TextUtils.equals(resultStatus, ALIPAY_SUCCESS);
        if(isSuccess)
        {
            Toast.makeText(activity, "支付成功", Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(activity, "支付失敗:"+resultInfo, Toast.LENGTH_SHORT).show();
        }
    }


}

效果圖:

附錄: