android 應用中加入支付功能(支付寶集成)

注意事項
1.添加android.permission.INTERNET權限和android.permission.ACCESS_NETWORK_STATE權限
2.代碼中出現註釋的地方重點看,沒註釋的地方能夠不看
3.想獲取支付寶合做商戶ID,及支付寶公鑰請點擊支付寶連接,生成密鑰及PKCS8轉碼工具在文檔中
java

1.下載官方架包和說明文檔android

到支付寶官網https://b.alipay.com/order/techService.htm?channel=psl下載(快捷支付(無線))開發包,咱們主要是用到 WS_SECURE_PAY_SDK\客戶端demo\Android_SDK 目錄下的alipay.jar 和 WS_SECURE_PAY_SDK\客戶端demo\Android_SDK\alipay_sdk_demo\assets下的alipay_msp.apk,這兩個文件是咱們不能修改的支付寶api和安裝包。api

2. 商戶簽約安全

3.密鑰配置服務器

4.引用jar和包含安裝包
    (1).新建android工程;
    (2).copy上面說的alipay.jar到工程的libs目錄下,並在java build path中經過Add External JARs找到並引用該jar;
    (3).copy上面說的alipay_msp.apk安裝包到assets目錄下,後面配置路徑用到。工具

5.調用代碼整理
   http://blog.csdn.net/simdanfeg/article/details/9011603ui

1、       支付寶平臺的集成this

在技術集成以前,商戶須要在https://ms.alipay.com進行註冊,並簽約安全支付服務。簽約成功後可獲取支付寶分配的合做商戶ID(PartnerID),帳戶ID(SellerID),調用接口時使用。編碼

支付細節的實現,主要經過支付寶提供的一個支付安全服務安裝包alipay_plugin_20120428msp.apk,首次使用,首先檢查是否安裝此插件,沒有會提示安裝。具體的支付細節,在這個插件內完成。大部分的支付平臺也都是採用的這種方式。url

調用支付寶的接口進行支付,主要有如下幾個步驟

1.  將商戶ID,收款賬號,外部訂單號,商品名稱,商品介紹,價格,通知地址封裝成訂單信息

2.  對訂單信息進行簽名

3.  將訂單信息,簽名,簽名方式封裝成請求參數

4.  調用pay方法。

主要流程圖以下:

支付接口pay方法的調用以下:

主要流程圖以下:


支付接口pay方法的調用以下:


。。。


// start pay for this order.


       // 根據訂單信息開始進行支付


       try {


           // prepare the order info.


           // 準備訂單信息


           String orderInfo = getOrderInfo(position);


           // 這裏根據簽名方式對訂單信息進行簽名


           String signType = getSignType();


           String strsign = sign(signType, orderInfo);


           Log.v("sign:", strsign);


           // 對簽名進行編碼


           strsign = URLEncoder.encode(strsign);


           // 組裝好參數


           String info = orderInfo + "&sign=" + "\"" + strsign + "\"" + "&"


                  + getSignType();


           Log.v("orderInfo:", info);


           // start the pay.


           // 調用pay方法進行支付


           MobileSecurePayer msp = new MobileSecurePayer();


           boolean bRet = msp.pay(info, mHandler, AlixId.RQF_PAY, this);


 


           if (bRet) {


              // show the progress bar to indicate that we have started


              // paying.


              // 顯示「正在支付」進度條


              closeProgress();


              mProgress = BaseHelper.showProgress(this, null, "正在支付", false,


                     true);


           } else


              ;


       } catch (Exception ex) {


           Toast.makeText(AlixDemo.this, R.string.remote_call_failed,


                  Toast.LENGTH_SHORT).show();


       }

。。。

/**

     * 向支付寶發送支付請求

     *

     * @param strOrderInfo

     *            訂單信息


     * @param callback


     *            回調handler


     * @param myWhat

     *            回調信息

     * @param activity

     *            目標activity

     * @return

     */

    public boolean pay(final String strOrderInfo, final Handler callback,

           final int myWhat, final Activity activity) {

       if (mbPaying)

           return false;

       mbPaying = true;

     //

       mActivity = activity;

       // bind the service.

       // 綁定服務

       if (mAlixPay == null) {

           // 綁定安全支付服務須要獲取上下文環境,

           // 若是綁定不成功使用mActivity.getApplicationContext().bindService

           // 解綁時同理

           mActivity.getApplicationContext().bindService(

                  new Intent(IAlixPay.class.getName()), mAlixPayConnection,

                  Context.BIND_AUTO_CREATE);


       }


       // else ok.


 


       // 實例一個線程來進行支付


       new Thread(new Runnable() {

           public void run() {

              try {

                  // wait for the service bind operation to completely

                  // finished.

                  // Note: this is important,otherwise the next mAlixPay.Pay()

                  // will fail.

                  // 等待安全支付服務綁定操做結束

                  // 注意:這裏很重要,不然mAlixPay.Pay()方法會失敗

                  synchronized (lock) {

                     if (mAlixPay == null)

                        lock.wait();

                 }


 


                  // register a Callback for the service.


                  // 爲安全支付服務註冊一個回調


                  mAlixPay.registerCallback(mCallback);


 


                  // call the MobileSecurePay service.


                  // 調用安全支付服務的pay方法


                  String strRet = mAlixPay.Pay(strOrderInfo);


                  BaseHelper.log(TAG, "After Pay: " + strRet);


 


                  // set the flag to indicate that we have finished.


                  // unregister the Callback, and unbind the service.

                  // 將mbPaying置爲false,表示支付結束

                  // 移除回調的註冊,解綁安全支付服務


                  mbPaying = false;


                  mAlixPay.unregisterCallback(mCallback);


                  mActivity.getApplicationContext().unbindService(


                         mAlixPayConnection);


 


                  // send the result back to caller.


                  // 發送交易結果


                  Message msg = new Message();


                  msg.what = myWhat;


                  msg.obj = strRet;


                  callback.sendMessage(msg);


              } catch (Exception e) {


                  e.printStackTrace();


 


                  // send the result back to caller.


                  // 發送交易結果


                  Message msg = new Message();


                  msg.what = myWhat;


                  msg.obj = e.toString();


                  callback.sendMessage(msg);


              }


           }


       }).start();


 


       return true;


    }


 


調用了支付服務以後,有兩種方式返回交易結果:


1.        支付結果做爲接口返回的字符串返回。返回的參數包含在result字符串中,具體再進行解析。


2.  支付寶服務器通知。商戶須要提供一個http協議的接口,包含在參數裏傳遞給安全支付,即notify_url。支付寶服務器在支付完成後,會用POST方法調用notufy_url,以xml爲數據格式傳輸支付結果。須要注意的是,商戶服務器收到支付寶發的通知以後,須要返回一個純字符串「success」,否則支付寶的服務器會持續調用七次回調url提供的接口。


集成須要的交易費用方面0-1萬元內是2.5%的費率,1-10萬是2.4%,10-100萬是2.2%,100萬以上2.0%。      

相關文章
相關標籤/搜索