日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android支付平台集成调研 .

發布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android支付平台集成调研 . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于在線支付平臺,目前國內主要有以下幾種 paypal 支付寶,財付通,盛付通,易寶支付,快錢,銀聯在線,國付寶,網易寶,匯付天下等等。

手機支付平臺,調研了支付寶,支付寶,財付通,盛付通,paypal,易寶支付,銀聯在線,google in-app billing。其中盛大的盛付通不支持手機支付。其余都有手機集成服務。國內第三方平臺的合作對象都是面向企業用戶的,須實名認證。首先需要在網站上進行合作簽約,簽約之后才能獲得相應的id和key。必須使用企業賬戶才能簽約,沒有面向個人用戶的服務。Google提供的支付平臺是可以供單個開發者集成的,但是是以google play客戶端為依托的。

同時調研了幾種主流購物類app支付平臺的集成情況。其中 京東使用的是銀聯在線,當當使用的快錢,蘇寧是自己的一個易付寶。amazon,美團等用的是支付寶。使用最多的也是支付寶。

下面主要看一下幾種支付平臺的集成方式。

一、???????支付寶平臺的集成

在技術集成之前,商戶需要在https://ms.alipay.com進行注冊,并簽約安全支付服務。簽約成功后可獲取支付寶分配的合作商戶ID(PartnerID),賬戶ID(SellerID),調用接口時使用。

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

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

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

2.??對訂單信息進行簽名

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

4.??調用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%。??????

二、???????財付通平臺的集成

財付通的集成和支付寶的非常相似(騰訊的傳統?→_→)。財付通也是提供了一個財付通安全支付服務應用TenpayService.apk用于處理交易的細節。對于此支付應用,財付通和支付寶的使用方式是一樣的。一種是捆綁預置,即打包在assets目錄下,另一種是放到自己的服務器中,通過檢查更新的方式動態加載。實際集成中可采用二者結合方式,初次使用使用預置apk,之后檢查更新動態下載。

但是調用支付接口之前,增加了一個獲取tokenid的過程,tokenid用于同財付通service進行交互。過程如下:

1.??用戶在商戶APP 選擇商品,使用財付通支付

2.??商戶APP向商戶server 請求使用財付通支付

3.??商戶server按照“支付初始化接口”的要求組織數據請求財付通“支付初始化接口”,接收初始化成功后返回的tokenid

4.??商戶server將生成的tokenid 返回給商戶APP

5.??商戶APP使用tokenid 調用財付通支付service

6.??財付通支付service 在驗證tokenid 后向用戶展示支付中心,顯示訂單信息及相關用戶信息

7.??用戶在支付中心輸入支付密碼執行支付

8.??財付通支付service 向財付通后臺server 請求執行支付,并實時接收支付結果

9.??支付成功后財付通支付service 向用戶展示支付成功UI,在用戶點擊“返回商戶網站”后回調商戶App

10.? 財付通后臺server 在支付成功后會通過“支付成功通知接口”在后臺通知商戶server 支付狀態。

接收支付接口返回結果方面,財付通對于方法返回值,不是直接返回的,而是通過handler回調,handler和msgId作為一個參數傳入接口,支付接口pay()方法的返回值只是個true false,用于區分調用成功或者失敗。其實跟淘寶的方式大同小異。對于notify_url,是財付通是通過get方式調用回調url,只返回支付成功的訂單。同樣的,商戶服務器在接收到財付通的調用之后,需要返回純字符串“success”“fail”表示處理成功或失敗。

調用支付接口的代碼如下:

//構造支付參數

????????????? HashMap<String, String> payInfo = new HashMap<String, String>();

????????????? payInfo.put("token_id", mTokenId);???????? //財付通訂單號token_id

????????????? payInfo.put("bargainor_id", "1234567890"); //財付通合作商戶ID,此為演示示例

//??????????? payInfo.put("order_type", "1");

????????????? payInfo.put("caller", "com.tenpay.android.appDemo");

?????????????

????????????? //去支付

????????????? tenpayHelper.pay(payInfo, mHandler, MSG_PAY_RESULT);

財付通的服務費率是1%,另外有相關的套餐可以優惠。

三、??易寶支付平臺集成

與支付寶和財付通不同的是,易寶集成時,并沒有提供一個支付應用apk,只有一個jar包。是一個library project。因為在集成時,需要在manifest文件里面聲明支付頁面的activity。同時在調用支付頁面時,需要用startActivityForResult方式進入,支付結果會通過onActivityResult方法返回。易寶同樣支持服務端回調,但比較糾結的是,易寶的服務端回調url,不能在代碼中傳入,需要在易寶的網站進行配置。只有支付成功時才會觸發此回調,以get方式調用。

調用支付接口的代碼如下:其中customerNumber參數是簽約之后才能獲取到的。requestId為調用方自定義的訂單流水號。

private void startPay(String customerNumber, String chennal) {

?????? String amount = etAmount.getText().toString();

?????? String productName = etProductName.getText().toString();

?????? String productDesc = etProductDesc.getText().toString();

??????

?????? if(TextUtils.isEmpty(productName) || TextUtils.isEmpty(amount)) {

?????????? Toast.makeText(YeepayExampleActivity.this, "", Toast.LENGTH_SHORT);

?????? }

??????

?????? Intent intent = new Intent(getBaseContext(), YeepayPlugin.class);

?????? intent.putExtra("customerNumber", customerNumber);

??????

?????? Random random = new Random();

?????? String time = "" + System.currentTimeMillis();

?????? String requestId = time + random.nextInt() % 10000;

??????

?????? intent.putExtra("requestId", requestId);

?????? intent.putExtra("amount",? amount);

?????? intent.putExtra("productName", productName);

?????? intent.putExtra("time", time);

?????? intent.putExtra("productDesc", (productDesc == null) ? "" : productDesc);

?????? intent.putExtra("support", chennal);

?????? intent.putExtra("environment", "ENV_TEST" );? ??????

?????? StringBuilder builder = new StringBuilder();

?????? builder.append(CUSTOMER_NUMBER).append("$");

?????? builder.append(requestId).append("$");

?????? builder.append(amount).append("$");

?????? builder.append(productName).append("$");

?????? builder.append(time);

??????

?????? String hmac = YeepayUtils.hmacSign(builder.toString(), KEY);

?

??? Log.e("YeepayExampleActivity", "hmac" + hmac);

?

?????? intent.putExtra("hmac", hmac);

?????? startActivityForResult(intent, 200);

??? }

易寶集成后的費率需要和易寶的客戶經理面談決定

四、??銀聯在線支付集成

銀聯的支付應用同支付寶和財付通相同,采用的是獨立apk的方式提供服務。調用支付接口采用的startActivity的方式,相關參數通過bundle傳遞,調用示例如下:

bundle.putBoolean(USE_TEST_MODE, true);

???????????

??????????? bundle.putString(SP_ID, "0009");

??????????? bundle.putString(SECURITY_CHIP_TYPE, null);

??????????? bundle.putString(SYS_PROVIDE, "00000001");

??????????? bundle.putString(PAY_DATA, payData);???

Intent startIntent = new Intent();

??????????? // startIntent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);

??????????? startIntent.putExtras(bundle);

??????????? startIntent.setClassName(UPPayUtils.PACKAGE_NAME,

??????????????????? UPPayUtils.ACTIVITY_NAME);

//??????????? activity.startActivityForResult(startIntent, UPPayUtils.STARTE_UPPAY);

??????????? activity.startActivity(startIntent);

與以上三種支付平臺不同的是,銀聯支付接口的返回值是通過廣播的形式發送的。不支持商戶服務端的回調url。

五、??Google in-app billing集成

Google的支付服務不同于以上任何平臺,主要依賴于google play,交易的細節完全在google play中完成,商戶客戶端通過ipc發生支付請求,采用廣播進行通信,傳遞數據。同時,也與國內第三方平臺不同的是,應用內的付費產品,道具,需要在google play網站上進行設定,訂單信息是google play控制的。

不需要特別的賬號,簽約之類的繁瑣的過程,任何一個開發者都可以集成此服務,只需要有一個開發者賬號(用來發布產品的),和一個google電子錢包賬號,但是交易費貌似是30%- -!paypal只有5%。Google定義的購買方式有兩種,一種是限定賬戶的,通過這種方式,一次購買,永久有效,交易信息由google保存,當用戶再次購買此種商品時,會彈出提示。此類方式的好處在于,當發生用戶清理掉data或者卸載重裝之類的情況時,可以調用接口從google取回交易信息。另一種是不限定賬戶的,即用戶可以反復購買,交易信息是商家自己保存的。

交易的流程如下:

1.?? App通過aidl定義的接口,發送購買請求(REQUEST_PURCHASE),指定一個產品ID和其他參數。

2.?? Google Play App發送一個廣播,廣播的intent中包含3個鍵:RESPONSE_CODE, PURCHASE_INTENT, and REQUEST_ID。其中PURCHASE_INTENT是一個pending intent 用于啟動交易頁面。

3.?? 調用該 pending intent。

4.?? 當結賬流程結束(用戶成功購買了貨物或者取消了購買),Google Play發送一個通知消息(IN_APP_NOTIFY 廣播)。這個通知消息包括了指向該交易的通知ID。

5.?? 商戶客戶端調用aidl接口,傳入GET_PURCHASE_STATE_CHANGED參數來請求交易信息,同時傳入之前收到的通知id。

6.?? Google Play發送交易信息,信息保存在PURCHASE_STATE_CHANGED 廣播 intent中。

7.?? 商戶客戶端發送一個確認消息(CONFIRM_NOTIFICATIONS)來確認接收到了給定通知ID的交易信息。

另外,集成此服務需要在manifest文件中加入com.android.vending.BILLING權限。

參考信息見 http://developer.android.com/guide/google/play/billing/billing_overview.html


相關資料:http://wenku.baidu.com/view/f253e2caa1c7aa00b52acb37.html&qq-pf-to=pcqq.group

該微博裝載之 :http://blog.csdn.net/shanpengfei77/article/details/8161089?

為無私奉獻者致敬。

總結

以上是生活随笔為你收集整理的android支付平台集成调研 .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。