1. 程式人生 > >銀聯支付整合教程

銀聯支付整合教程

寫這篇部落格只是希望以後的哥們少走點彎路,網上的教程很多,但是我認為還是不夠明確,可能沒做過的要看半天才能看懂,廢話不多說,直接講講我整合的過程吧!


進入網站,將官方的demo下載下來,說實話,我感覺看官方的demo有點冗餘,直接照著我的步驟來吧:

建立自己的工程,在project目錄下操作,在main資料夾裡面建立assert資產檔案,將data.bin檔案放進去,在建立jniLibs資料夾,將C語言的so庫拷貝進去,這些檔案在官方的壓縮包裡面都能找到,耐心找一找,實際效果如下圖



別忘了將UPPayAssistEx.jar拷貝到lib庫裡面去

許可權別忘了新增

 <!--銀聯許可權-->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission
        android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
        /> <uses-permission
    android:name="android.permission.ACCESS_WIFI_STATE" />

    <!--<!— 如果選擇智慧卡方式(即sdkPro)整合,需要額外定義以下許可權 –>-->
    <uses-permission
        android:name="android.permission.RECORD_AUDIO" />
    <uses-permission
        android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission
        android:name="org.simalliance.openmobileapi.SMARTCARD" />


銀聯activity也別忘了註冊

  <!--銀聯支付app-->
        <activity android:name="com.unionpay.uppay.PayActivity"

        android:label="@string/app_name"

        android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"

        android:excludeFromRecents="true"

        android:windowSoftInputMode="adjustResize"/>


照著上面的寫就行,官方的demo裡面也有,可以直接copy就行了

"http://101.231.204.84:8091/sim/getacptn"

利用上面的網址生成一個tn流水號,我們app'端支付主要就靠這個流水號(注意,在實際的專案中,這個tn流水賬號是後臺返給我們的)

/*****************************************************************
     * mMode引數解釋: "00" - 啟動銀聯正式環境 "01" - 連線銀聯測試環境
     *****************************************************************/
    private final String mMode = "01";
    private Button bt;
    private static final String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        bt = (Button) findViewById(R.id.bt);
        bt.setOnClickListener(this);
    }


    //    回撥
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        /*************************************************
         * 步驟3:處理銀聯手機支付控制元件返回的支付結果
         ************************************************/
        if (data == null) {
            return;
        }
        String msg = "";
        /*
         * 支付控制元件返回字串:success、fail、cancel 分別代表支付成功,支付失敗,支付取消
         */
        String str = data.getExtras().getString("pay_result");
        if (str.equalsIgnoreCase("success")) {
            // 支付成功後,extra中如果存在result_data,取出校驗
            // result_data結構見c)result_data引數說明
            if (data.hasExtra("result_data")) {
                String result = data.getExtras().getString("result_data");
                //                try {
                //                    JSONObject resultJson = new JSONObject(result);
                //                    String sign = resultJson.getString("sign");
                //                    String dataOrg = resultJson.getString("data");
                //                    // 驗簽證書同後臺驗簽證書
                //                    // 此處的verify,商戶需送去商戶後臺做驗籤
                //                    boolean ret = verify(dataOrg, sign, mMode);
                //                    if (ret) {
                //                        // 驗證通過後,顯示支付結果
                //                        msg = "支付成功!";
                //                    } else {
                //                        // 驗證不通過後的處理
                //                        // 建議通過商戶後臺查詢支付結果
                //               msg = "支付失敗!";
                //                    }
                //                } catch (JSONException e) {
                //                }
                //            } else {
                // 未收到簽名信息
                // 建議通過商戶後臺查詢支付結果
                //               msg = "支付成功!";
                //            }
                msg = "支付成功!";
            } else if (str.equalsIgnoreCase("fail")) {
                msg = "支付失敗!";
            } else if (str.equalsIgnoreCase("cancel")) {
                msg = "使用者取消了支付";
            }

            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
            System.out.println("支付結果通知"+msg);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("支付結果通知");
            builder.setMessage(msg);
            builder.setInverseBackgroundForced(true);
            // builder.setCustomTitle();
            builder.setNegativeButton("確定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            builder.create().show();
        }
    }

    @Override
    public void onClick(View v) {
        /*************************************************
         * 步驟2:通過銀聯工具類啟動支付外掛
         ************************************************/
        UPPayAssistEx.startPayByJAR(this, PayActivity.class, null, null,
                "201612051739317670088", mMode);
    }
下面是支付的主要程式碼,呼叫支付的主要程式碼就是點選事件裡面的startPayByJar

上面的方法是支付的回撥方法,你可以在回撥裡面編寫自己的邏輯

這只是一個測試的demo,如果在自己的實際專案中,要將上面的mode的01改成00;tn賬號請求後臺介面返回給我們,利用tn賬號去實現支付的功能

小弟菜鳥一枚,大神看了可能感覺太冗餘,寫這篇部落格一是為了給自己做個筆記的作用,二是為了幫助和我一樣在開發這條道路上奮力拼搏的兄弟們!如果中間有什麼寫的不對的地方歡迎指正