我们正在将 Google pay 应用到我们的银行应用程序中。我们想在 google pay(钱包)中添加一张信用卡。我们遵循文档中的所有说明
我们应该在万事达卡方面以及另外一个提供商方面拥有一张列入白名单的卡。我们还从我们的 BE 获得 OPC。问题是当我打开钱包模式时,有关于持卡人的信息,如姓名、地址、电话号码......当我们想继续时,钱包试图联系服务器并显示错误消息最近尝试出错了而且我在Android logcat中找不到任何错误消息,没有任何相关。
这就是我们创建 PushTokenizeRequest 以及在活动中打开的方式(我们在 React-Native 模块中)
private void handleAddToGooglePayClick(String rawData) {
Log.e(TAG, "==============RAW JSON: " + rawData);
try {
JSONObject data = new JSONObject(rawData);
UserAddress address = getUserAddress(data);
PushTokenizeRequest pushTokenizeRequest = getPushTokenizeRequest(data, address);
Log.e(TAG,"ADRESS: "+ address.toString());
Log.d(TAG, "===================================handleAddToGooglePayClick: OPENING");
mTapAndPayClient.pushTokenize((Activity) mMainActivityContext, pushTokenizeRequest, REQUEST_CODE_PUSH_TOKENIZE);
} catch (JSONException e) {
Log.e(TAG, "handleAddToGooglePayClick JSON: " + e.toString());
}
}
private UserAddress getUserAddress(JSONObject addressData) throws JSONException {
return UserAddress.newBuilder()
.setName(addressData.getString("fullName"))
.setAddress1(addressData.getString("address"))
.setLocality(addressData.getString("locality"))
.setAdministrativeArea(addressData.getString("administrativeArea") )
.setCountryCode(addressData.getString("countryCode"))
.setPostalCode(addressData.getString("postalCode"))
// .setPhoneNumber(addressData.getString("phone"))
.setPhoneNumber("+4915223433333")
.build();
}
private PushTokenizeRequest getPushTokenizeRequest(JSONObject generalData, UserAddress userAddress) throws JSONException {
String opc = generalData.getString("opc");
byte[] opcBytes = opc.getBytes();
return new PushTokenizeRequest.Builder()
.setOpaquePaymentCard(opcBytes)
.setNetwork(TapAndPay.CARD_NETWORK_MASTERCARD)
.setTokenServiceProvider(TapAndPay.TOKEN_PROVIDER_MASTERCARD)
.setDisplayName(generalData.getString("displayName"))
.setLastDigits(generalData.getString("cardLastFourDigit"))
.setUserAddress(userAddress)
.build();
}
}
一切似乎都是正确的。来自 JSON 的所有数据都在那里,我可以在钱包模式中看到它们。
并且 OPC 是 base64 字符串,当我们对其进行解码时,我们得到了对象:
{
"fundingAccountInfo":{
"encryptedPayload":"7B227075626C696...very long hash"
},
"tokenizationAuthenticationValue":"eyJ2ZXJza...very long hash"
}
在里面tokenizationAuthenticatioValue
我们有一些base64的数据:
{
"version":"3",
"signatureAlgorithm":"RSA-SHA256",
"dataValidUntilTimestamp":"2021-09-13T15:30:46Z",
"includedFieldsInOrder":"dataValidUntilTimestamp|accountNumber|financialAccountInformation",
"signature":"T35Y2u+3DZJ.......Tbw=="
}
我认为这个 OPC 对象是错误的,我们无法准确找到应该存在的内容。