在你的项目中集成 Android pay支付
設(shè)置Google Pay API
- Contents
- Before you get started開始之前?
- Configure your project配置你的項(xiàng)目?
- Add dependencies添加依賴關(guān)系?
- Modify your Manifest修改你的清單?
開始之前
在開始之前,請(qǐng)查看以下先決條件:
- 您的設(shè)備必須安裝Google Play服務(wù)版本11.4.x或更新版本
- 安裝并向Google Pay添加付款方式
- 向Google添加付款方式
- 堅(jiān)持我們的Google Pay API可接受使用政策和Google Play開發(fā)者政策
- 讓Google為您處理付款
- 銷售電影或游戲等數(shù)碼產(chǎn)品
配置你的項(xiàng)目
如果您還沒有Android Studio,請(qǐng)下載并安裝Android Studio?。
添加依賴關(guān)系
Google Pay API是Google Play服務(wù)的一部分,因此您只需導(dǎo)入Google Play服務(wù)庫(kù)即可獲取所需的一切。?或者,您可以選擇要自己編譯的API。
要導(dǎo)入整個(gè)Google Play服務(wù)庫(kù),請(qǐng)參閱設(shè)置Google Play服務(wù)?。
如果您更愿意選擇性地僅編譯所需的API,請(qǐng)打開應(yīng)用程序模塊中的build.gradle文件,并將以下內(nèi)容添加到依賴性塊中:
?dependencies {? ??compile 'com.google.android.gms:play-services-wallet:11.4.0'? ??compile 'com.android.support:support-v4:24.1.1'? ??compile 'com.android.support:appcompat-v7:24.1.1'?}?有關(guān)最新的Google Pay API版本信息,請(qǐng)參閱設(shè)置Google Play服務(wù)?。?有關(guān)支持庫(kù)的最新信息,請(qǐng)參閱支持庫(kù)設(shè)置?。
修改你的清單
要在您的應(yīng)用中啟用Google Pay,您需要將以下Google Pay API元數(shù)據(jù)添加到AndroidManifest.xml的<application>標(biāo)記中:
?<application>? ...
? <!-- Enables the Google Pay API -->
? <meta-data
? ? android:name="com.google.android.gms.wallet.api.enabled"
? ? android:value="true" />
</application>
?
以下步驟顯示了如何將您的應(yīng)用程序與Google Pay API集成。
第1步:創(chuàng)建PaymentsClient實(shí)例
在Activity的onCreate方法中創(chuàng)建一個(gè)PaymentsClient的實(shí)例。?這允許與付款A(yù)PI交互。
?private PaymentsClient mPaymentsClient;?? ? ? ?@Override?? ? ? public void onCreate() { ??super.onCreate();? mPaymentsClient = Wallet.getPaymentsClient( this, new Wallet.WalletOptions.Builder() .setEnvironment(WalletConstants.ENVIRONMENT_TEST) .build());?}第2步:調(diào)用isReadyToPay API
實(shí)現(xiàn)isReadyToPay方法,如以下示例所示:
? private void isReadyToPay() {? ? ? IsReadyToPayRequest request = IsReadyToPayRequest.newBuilder() ? ?.addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_CARD) ? ? ? ? ? ?? ? ? ??.addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD) .build();?? ? ? Task<Boolean> task = mPaymentsClient.isReadyToPay(request);?? ? ? task.addOnCompleteListener( new OnCompleteListener<Boolean>() { public void onComplete(Task<Boolean> task) { try {? boolean result = task.getResult(ApiException.class);? if (result == true) {?? ? ? ? ? // Show Google as payment option.?? ? ? ? ?} else {
? ? ? ? ? // Hide Google as payment option.?
? ? ? ? ?}?
? ? ? ?} catch (ApiException exception) {
? ? ? }?
? ? }?
? ?});
?}
第3步:創(chuàng)建PaymentDataRequest對(duì)象
創(chuàng)建createPaymentDataRequest方法。?根據(jù)您使用的付款處理器,使用正確的參數(shù)啟動(dòng)PaymentMethodTokenizationParameters對(duì)象。?另外,請(qǐng)確保使用addAllowedPaymentMethods指定允許的付款方式。
? private PaymentDataRequest createPaymentDataRequest() { PaymentDataRequest.Builder request = PaymentDataRequest.newBuilder()? .setTransactionInfo( TransactionInfo.newBuilder() .setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_FINAL) .setTotalPrice("10.00")? .setCurrencyCode("USD") .build())? .addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_CARD) .addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD) .setCardRequirements( CardRequirements.newBuilder()? .addAllowedCardNetworks( Arrays.asList(? WalletConstants.CARD_NETWORK_AMEX,? WalletConstants.CARD_NETWORK_DISCOVER,? WalletConstants.CARD_NETWORK_VISA,? WalletConstants.CARD_NETWORK_MASTERCARD) ) .build()); PaymentMethodTokenizationParameters params = PaymentMethodTokenizationParameters.newBuilder() .setPaymentMethodTokenizationType(? WalletConstants.PAYMENT_METHOD_TOKENIZATION_TYPE_PAYMENT_GATEWAY)? .addParameter("gateway", "yourGateway")? .addParameter("gatewayMerchantId", "yourMerchantIdGivenFromYourGateway")? .build(); request.setPaymentMethodTokenizationParameters(params);? return request.build();?}標(biāo)記類型可以是以下之一:
- PAYMENT_METHOD_TOKENIZATION_TYPE_PAYMENT_GATEWAY?:如果您使用支持Google Pay API的支付提供商,請(qǐng)使用此標(biāo)記化類型。在PaymentMethodTokenizationParameters對(duì)象中包含任何提供者特定的參數(shù)。?您將收到一個(gè)付款標(biāo)記,可以直接向您的處理器收費(fèi)。
以下處理器目前支持此方法:
- Adyen
- 布倫特里
- EBANX
- PaySafe
- 條紋
- Vantiv
- WorldPay的
- PAYMENT_METHOD_TOKENIZATION_TYPE_DIRECT?:如果您不使用支持的支付提供程序直接請(qǐng)求和處理支付憑證,
- 請(qǐng)使用此標(biāo)記化類型。在PaymentMethodTokenizationParameters對(duì)象中包含publicKey參數(shù),然后按照付款數(shù)據(jù)加密中
- 的說明解密安全支付卡行業(yè)數(shù)據(jù)安全標(biāo)準(zhǔn)(PCI DSS)兼容服務(wù)器環(huán)境中的憑證。
第4步:創(chuàng)建OnClickListener對(duì)象
為Checkout操作定義一個(gè)OnClickListener?,它將生成一個(gè)PaymentDataRequest對(duì)象,如下例所示。
findViewById(R.id.buy_button)? ? .setOnClickListener(
? ? ? ? 新的View.OnClickListener(){
? ? ? ? ? @覆蓋
? ? ? ? ? public void onClick(View view){
? ? ? ? ? ? PaymentDataRequest request = createPaymentDataRequest();
? ? ? ? ? ? if(request!= null){
? ? ? ? ? ? ? AutoResolveHelper.resolveTask(
? ? ? ? ? ? ? ? ? mPaymentsClient.loadPaymentData(請(qǐng)求),
? ? ? ? ? ? ? ? ? 這個(gè),
? ? ? ? ? ? ? ? ? // LOAD_PAYMENT_DATA_REQUEST_CODE是一個(gè)常量值
? ? ? ? ? ? ? ? ? //你定義
? ? ? ? ? ? ? ? ? LOAD_PAYMENT_DATA_REQUEST_CODE );
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? });
PaymentDataRequest對(duì)象是表示支付數(shù)據(jù)請(qǐng)求的PaymentDataRequest?,它提供必要的信息來支持支付。?使用AutoResolveHelper類自動(dòng)解決任務(wù),然后在Activity類的onActivityResult()方法中處理結(jié)果。
第5步:處理PaymentData響應(yīng)對(duì)象
當(dāng)您調(diào)用loadPaymentData?,?PaymentData對(duì)象返回到onActivityResult?。?解析PaymentData對(duì)象以獲取付款提供商可以收取的付款憑證。
? @Override? public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case LOAD_PAYMENT_DATA_REQUEST_CODE:? switch (resultCode) { case Activity.RESULT_OK:? PaymentData paymentData = PaymentData.getFromIntent(data);? String token = paymentData.getPaymentMethodToken().getToken(); break;? case Activity.RESULT_CANCELED:? break;? case AutoResolveHelper.RESULT_ERROR:? Status status = AutoResolveHelper.getStatusFromIntent(data); // Log the status for debugging.? // Generally, there is no need to show an error to? // the user as the Google Pay API will do that. break;? default:? // Do nothing.? }? break;? default:? // Do nothing.? }?}第6步:請(qǐng)參閱您的付款處理器
有關(guān)如何完成交易的更多信息,請(qǐng)參閱付款處理器的文檔。
- Adyen
- 布倫特里
- PaySafe
- 條紋
- Vantiv
- WorldPay的
測(cè)試你的應(yīng)用程序
在本節(jié)中,您將學(xué)習(xí)如何測(cè)試您的應(yīng)用程序,以確保它已準(zhǔn)備好進(jìn)行生產(chǎn)。
關(guān)于測(cè)試環(huán)境
我們的測(cè)試環(huán)境不會(huì)在PaymentsData響應(yīng)中返回實(shí)時(shí)計(jì)費(fèi)令牌,但測(cè)試環(huán)境允許我們測(cè)試您的預(yù)購(gòu)工作流程。?在您的應(yīng)用程序有生產(chǎn)訪問權(quán)限之前,您將在付款選擇器上看到Unrecognized App錯(cuò)誤。
WalletOptions?environment參數(shù)的值指示服務(wù)器是在生產(chǎn)環(huán)境還是在測(cè)試環(huán)境中運(yùn)行。environment價(jià)值可以是下列之一:
- WalletConstants.ENVIRONMENT_PRODUCTION
- WalletConstants.ENVIRONMENT_TEST
要進(jìn)行測(cè)試和開發(fā),請(qǐng)使用WalletConstants.ENVIRONMENT_TEST?。
回顧我們的品牌要求
為了確保您遵守我們的準(zhǔn)則和標(biāo)準(zhǔn),請(qǐng)確保您的應(yīng)用程序符合我們的品牌準(zhǔn)則?。
部署您的應(yīng)用程序
在本節(jié)中,您將學(xué)習(xí)如何準(zhǔn)備您的應(yīng)用程序進(jìn)行生產(chǎn)并開始接受實(shí)際支付。
訪問生產(chǎn)環(huán)境
準(zhǔn)備好部署Google Pay API集成后,請(qǐng)注冊(cè)以獲取訪問權(quán)限并使用生產(chǎn)憑據(jù)進(jìn)行測(cè)試。
使用釋放鍵為您的應(yīng)用簽名
當(dāng)您的應(yīng)用程序指向Google Pay API生產(chǎn)環(huán)境時(shí),如果用于簽名Android應(yīng)用程序的簽名密鑰指紋與注冊(cè)到Google Play的版本密鑰指紋不匹配,則Google Pay API將返回ERROR_CODE_MERCHANT_ACCOUNT_ERROR (405)?。?這通常發(fā)生在開發(fā)中的應(yīng)用程序從測(cè)試環(huán)境切換到生產(chǎn)環(huán)境之后。
要解決此問題,請(qǐng)確保提供給Google的指紋與用于簽署Android應(yīng)用的密鑰的指紋相匹配。?一旦Android應(yīng)用程序被簽名,您可以使用以下命令驗(yàn)證用于簽名的密鑰的指紋:
//首先從APK中提取META-INF / CERT.RSAjar -xvf ? META-INF / CERT.RSA
充氣:META-INF / CERT.RSA
keytool -printcert -file META-INF / CERT.RSA
?證書指紋:
? ? MD5:77:41:C5:C1:DD:3F:6C:09:88:FA:33:3D:83:5F:D3:9E
? ? SHA1:EC:4A:EE:DC:F4:02:EA:87:0A:C5:09:C0:58:06:91:E7:EA:41:09:9D
? ?簽名算法名稱:SHA1withRSA
將SHA1與提供給Google Play的指紋進(jìn)行匹配。
配置您的應(yīng)用程序的生產(chǎn)
使用以下步驟來配置您的應(yīng)用程序的生產(chǎn):
?
總結(jié)
以上是生活随笔為你收集整理的在你的项目中集成 Android pay支付的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Prometheus监控(三)—— 钉钉
- 下一篇: android sina oauth2.