關於支付這塊的,有微信和支付寶不就夠了么,何必還要再多搞一個蘋果支付呢?多此一舉的事,而且蘋果支付還得分去30%的錢,哪個老板能受得了?
是老板願意搞蘋果支付么?不,是蘋果IOS市場太強制了,對於app內有虛擬物品交易的,一律需要接上蘋果支付,不然駁回上架審核。所以說,想要上架蘋果app store的話,如果駁回信息叫你搞,
很大程度上就是非搞不可了。
蘋果支付,我是用App plus的支付api,調用比較簡單,可以去了解下plus支付文檔
使用前有兩點要了解的
1、登錄iTunes Connet 應用后台,創建App內購項目,設置好稅務和銀行卡等配置信息,具體操作基本分三步,可參考https://help.apple.com/app-store-connect/#/devb57be10e7
2、HbuilderX要打自定義調試基座,打測試包前,記得要勾選Apple應用內支付
app內使用調用方法
1、首先必須調取plus.payment.getChannels 獲取支付通道,拿到id為‘appleiap’的通道,我這里就將它賦值給iap變量,支付方法都在這iap里
2、調用iap的requestOrder
方法,向蘋果服務器請求獲取商品的詳細信息,就是內購項目列表,支付前必須先調用這個方法獲取訂單信息,或者支付失敗
3、這一步就開始調取支付了,plus的api支付,plus.payment.request(channel, statement, successCB, errorCB
)方法發起支付請求,
參數:
- channel: ( PaymentChannel ) 必選 支付通道
指定支付操作的通道,通過getChannels接口獲取。
- statement: ( String | JSON | OrderStatementIAP ) 必選 支付訂單信息
支付訂單信息,由支付通道定義的數據格式,通常是由業務服務器生成或向支付服務器獲取,是經過加密的字符串信息。
- successCB: ( PaymentSuccessCallback | IapPaymentSuccessCallback ) 可選 請求支付成功回調函數
請求支付成功時觸發,用於返回支付結果。
- errorCB: ( PaymentErrorCallback ) 可選 請求支付失敗回調函數
請求支付失敗時觸發,用於返回錯誤信息。
uniapp實例
//首先注入iap,用於蘋果支付 var iap = null; plus.payment.getChannels(function(channels) { console.log(channels,"why"); for (var i in channels) { var channel = channels[i]; // 獲取 id 為 'appleiap' 的 channel if (channel.id === 'appleiap') { iap = channel; } } }, function(e) { console.log("獲取iap支付通道失敗:" + e.message); }); function restoreComplateRequest() { iap.restoreComplateRequest({}, function(results) { // results 格式為數組存放恢復的IAP商品交易信息對象 IAPTransaction,需要將返回的支付憑證傳給后端進行二次認證 }); } import qs from 'qs'; export default{ data() { return { vi: '' } },
onShow(){
if(this.restoreFlag){
restoreComplateRequest();
}
}, methods:{ payfn(){ if(!iap){return false;} this.onefn(); }, onefn(){ // ids 為在蘋果開發者后台配置的應用內購項目的標識集合 var ids = ['my25']; // iap 為剛剛獲取的`appleiap`支付通道 iap.requestOrder(ids, (e)=> { // 獲取訂單信息成功回調方法 console.log('requestOrder success: ' + JSON.stringify(e)); this.twofn(); }, function(e) { // 獲取訂單信息失敗回調方法 console.log('requestOrder failed: ' + JSON.stringify(e)); }); }, twofn(){ this.restoreFlag = true; // 調用支付接口時標記 restoreFlag = true , 實際應用請將標記存儲在 storage 中 plus.payment.request(iap, { productid: "my25", // 用戶標識 optimize: true // 設置 optimize: true 解決丟單問題 }, (result)=> {
this.restoreFlag = false; // 支付成功清除標記 restoreFlag = false // 支付成功,result 為 IAP商品交易信息對象 IAPTransaction 需將返回的支付憑證傳給后端進行二次認證 }, function(e) { console.log(e,"錯誤"); // 支付失敗的時候需要調用一下 restoreComplateRequest 方法 restoreComplateRequest() }); } } }
注意事項
- 使用沙盒環境測試時每次調用支付接口需要換一個新的測試賬號或商品,同一個賬號多次購買同一個商品可能會沒有回調;
- productid是內購項目的產品ID(自定義的名稱,怎么方便開發就怎么取)