沙盒测试模式下 Android 中的 Paypal 支付网关集成问题
Posted
技术标签:
【中文标题】沙盒测试模式下 Android 中的 Paypal 支付网关集成问题【英文标题】:Paypal Payment Gateway Integration Issues in Android in Sandbox testing mode 【发布时间】:2021-05-18 10:34:01 【问题描述】:我已经开始在我的 android 应用程序中集成 Paypal 支付网关。但问题是—— 在沙盒测试期间,Paypal 付款屏幕显示,但在填写详细信息(Paypal 登录凭据)后继续进一步显示 404 - RESOURCE_NOT_FOUND。指定的资源不存在。
我遵循的步骤 - 1- 设置 PayPalConfiguration.ENVIRONMENT_SANDBOX 模式。 2- 设置 Client_ID 3- 设置货币 USD
我还尝试生产模式更改所有必需的设置,但在这种情况下遇到了 429 - 多次点击问题。 我也花了一整天时间和我的朋友一起解决这个问题,但没有找到成功。
1- Paypal 是限制沙盒测试模式还是仅在印度限制此服务?2-解决此问题的解决方案是什么? 或 Paypal 删除沙盒测试服务,或者我需要实施 BrainTree SDK 以进行 paypal 集成?
我的活动课程开始
公共类 MainActivity 扩展 AppCompatActivity 私有静态最终字符串 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 通信,是仅客户端还是基于 API 的集成,您的请求以及完整的错误响应等 @PrestonPHX 感谢您的回复我已经编辑了我的问题并添加了堆栈日志。现在我在android中使用它的客户端支付。 【参考方案1】:PayPal Android SDK 已弃用,因此您似乎正在使用已弃用的解决方案。如果您需要本机 SDK,通过 Braintree 的 Express Checkout 是唯一可用的。但是,您确实需要服务器或 Web 服务才能使用 Braintree,因为该集成包含服务器端部分。
或者,您可以在您的服务器或网络服务上集成 v2 Create Order API,并使用 rel:approve URL 从您的本机应用程序打开浏览器,并让返回 URL 成为您的应用程序的深层链接,然后触发 Capture从您的服务器订购呼叫。
如您所见,所有解决方案都需要服务器或网络服务。
【讨论】:
以上是关于沙盒测试模式下 Android 中的 Paypal 支付网关集成问题的主要内容,如果未能解决你的问题,请参考以下文章