android - 沙盒测试模式下 Android 中的 Paypal 支付网关集成问题
问题描述
我已经在我的 android 应用程序中开始了 Paypal 支付网关集成。但问题是 - 在沙盒测试期间,Paypal 支付屏幕显示,但在填写详细信息(Paypal 登录凭据)后继续进一步显示
404 - RESOURCE_NOT_FOUND。指定的资源不存在。
我遵循
的步骤 - 1- 设置PayPalConfiguration.ENVIRONMENT_SANDBOX 模式。
2- 设置Client_ID
3- 设置货币USD
我还尝试了生产模式更改所有必需的设置,但在这种情况下遇到了
429-Multiple hit 问题。
我也花了一整天时间和我的朋友一起解决这个问题,但没有找到成功。
1- Paypal 是限制沙盒测试模式还是仅在印度限制此服务?
2-解决此问题的解决方案是什么?
或 Paypal 删除沙盒测试服务,或者我需要实施BrainTree SDK 以进行 paypal 集成?
我的活动课开始
公共类 MainActivity 扩展 AppCompatActivity { private static final String TAG = "paymentExample"; 私有静态最终字符串 CONFIG_ENVIRONMENT = PayPalConfiguration.ENVIRONMENT_SANDBOX; 私有静态最终字符串 PAYMENT_TYPE = "USD"; private static final String CONFIG_CLIENT_ID = "这里是我的客户 ID 代码";
private static final int REQUEST_CODE_PAYMENT = 1;
private static PayPalConfiguration config = new PayPalConfiguration()
.environment(CONFIG_ENVIRONMENT)
.clientId(CONFIG_CLIENT_ID);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, PayPalService.class);
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
startService(intent);
}
public void onBuyPressed(View pressed) {
PayPalPayment thingToBuy = getThingToBuy();
Intent intent = new Intent(MainActivity.this, PaymentActivity.class);
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingToBuy);
startActivityForResult(intent, REQUEST_CODE_PAYMENT);
}
private PayPalPayment getThingToBuy() {
return new PayPalPayment(new BigDecimal("0.1"), PAYMENT_TYPE, "eSIM",
PayPalPayment.PAYMENT_INTENT_SALE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i(TAG, data.toString());
if (requestCode == REQUEST_CODE_PAYMENT) {
if (resultCode == Activity.RESULT_OK) {
PaymentConfirmation confirm =
data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
if (confirm != null) {
try {
Log.i(TAG, confirm.toJSONObject().toString(4));
Log.i(TAG, confirm.getPayment().toJSONObject().toString(4));
} catch (JSONException e) {
Log.e(TAG, "an extremely unlikely failure occurred: ", e);
}
}
} else if (resultCode == Activity.RESULT_CANCELED) {
Log.i(TAG, "The user canceled.");
} else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
Log.i(
TAG,
"An invalid Payment or PayPalConfiguration was submitted. Please see the docs.");
}
}
}
@Override
public void onDestroy() {
// Stop service when done
stopService(new Intent(this, PayPalService.class));
super.onDestroy();
}
活动类结束
错误堆栈日志
E/paypal.sdk: request failure with http statusCode:404,exception:Not Found
2021-02-15 21:48:22.046 3106-3200/com.claytech.paypaldemoapplication E/paypal.sdk: Exception parsing server response
org.json.JSONException: End of input at character 0 of
at org.json.JSONTokener.syntaxError(JSONTokener.java:460)
at org.json.JSONTokener.nextValue(JSONTokener.java:101)
at com.paypal.android.sdk.cw.m(Unknown Source:7)
at com.paypal.android.sdk.fm.d(Unknown Source:0)
at com.paypal.android.sdk.ci.a(Unknown Source:21)
at com.paypal.android.sdk.cm.a(Unknown Source:58)
at com.paypal.android.sdk.cq.onResponse(Unknown Source:45)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
2021-02-15 21:48:22.057 3106-3200/com.claytech.paypaldemoapplication E/paypal.sdk: request failed with server response:
2021-02-15 21:48:22.075 3106-3106/com.claytech.paypaldemoapplication E/paypal.sdk: INTERNAL_SERVER_ERROR
解决方案
PayPal Android SDK 已弃用,因此您似乎正在使用已弃用的解决方案。如果您需要本机 SDK,通过 Braintree 的 Express Checkout 是唯一可用的。但是,您确实需要一个服务器或 Web 服务来使用 Braintree,因为该集成有一个服务器端部分。
或者,您可以在您的服务器或网络服务上集成 v2 Create Order API,并使用 rel:approve URL 从您的本机应用程序打开浏览器,并让返回 URL 成为您的应用程序的深层链接,然后触发捕获订单调用你的服务器。
如您所见,所有解决方案都需要服务器或 Web 服务。
推荐阅读
- python - 如何在称为 celery 任务的异步中实现 if 语句?
- keras - 在每个批量大小中使用自定义填充训练 LSTM
- python - 如何在tensorflow中交换3d张量内的行
- powerbi - 在 Power BI 的“可视化”窗格中看不到“行和列”选项
- gradle - 如何使用 Gradle 在 teamcity 中获取配置参数的值?
- c# - 如何从字符串中获取“标签”?
- python - 将函数的输出保存到列表中的 Python 函数
- java - Blue Pelican Java - 练习 19.18
- azure-resource-manager - Azure 资源管理器模板:有没有办法获取资源组下资源类型的所有 resourceId/resourceName?
- r - 提取两个字符之间的字符 R