我创建了一个Android移动应用,该应用集成了Stripe以接受卡付款。在我的Android应用程序中,我将一堆参数发送到Laravel API,其中一个参数是Stripe令牌。
10次中有9次,我的服务器将按预期处理。它将使用Stripe-Cartalyst创建一个收费对象并创建一个收费,假设没有抛出异常(例如卡信息不正确或服务器错误),我的api随后将成功处理付款并在其中插入一些内容一个数据库,之后它将返回201 HTTP状态代码给客户端,然后我在Android端处理它。
我遇到的错误(或我做错了的事情)是随机发生的。有时,我的API会从Stripe抛出未捕获的异常,解释令牌(加密的Stripe卡详细信息),只能使用一次。我已经在Android端进行了一些调试,可以验证我在发送令牌的位置仅发出了1个HTTP请求,并在Laravel API上进行了一些登录,并发现了一些奇怪的情况。
我发现的东西 在API上,我将过程的一些关键时刻打印到了日志文件中。
然后在大约20/30的命令发生后,我重新创建该错误,这是发生的过程:
首先,在Android应用上,发送了以下令牌(并打印到控制台);
tok_1DiK0uKIdjSiVG8mn8CV2iim
检查后,此HTTP请求仅触发一次,因此我认为这不是Android问题。
接下来,在API日志文件上,发生了以下事情:
2018-12-17 11:11:56] local.DEBUG:令牌:tok_1DiK0uKIdjSiVG8mn8CV2iim [2018-12-17 11:11:56] local.DEBUG:创建条纹电荷
[2018-12-17 11:11:59]本地。调试:令牌:tok_1DiK0uKIdjSiVG8mn8CV2iim
[2018-12-17 11:11:59]本地。调试:创建条纹电荷
[2018-12-17 11:12:00]本地。错误:当前还有另一个 使用此Stripe令牌进行中的请求(这可能意味着您 点击两次,其他费用仍在处理中): tok_1DiK0uKIdjSiVG8mn8CV2iim。如果不能再次使用此令牌 充电成功。” {“例外”:“ [对象] (Cartalyst \ Stripe \ Exception \ MissingParameterException(代码:400): 当前有另一个使用此Stripe令牌的进行中请求 (这可能意味着您单击了两次,而其他费用仍 正在执行):tok_1DiK0uKIdjSiVG8mn8CV2iim。此令牌不能是 如果收费成功,则再次使用。”在 /home/rbfs6nkk73qi/api/prototype/vendor/cartalyst/stripe/src/Exception/Handler.php:123) [stacktrace]
[2018-12-17 11:12:00]本地。调试:交货单
[2018-12-17 11:12:00]本地。调试:检查单个项目
[2018-12-17 11:12:00]本地。调试:卡交付-通过下订单 Android V0.5应用程序
这表明从我列出的1-5的步骤中,API的确完成了:1、2、1、2,错误,3、4、5。
我完全不知道为什么我的API会随机运行两次。我在下面粘贴了我的API的相关部分,以查看是否存在明显的错误。感谢任何帮助。
我尝试过的最后一件事:我尝试在创建$token
充电对象之后直接将null
变量设置为$stripe
,这让我想知道这是否是{ {1}}。
Cartalyst bug
答案 0 :(得分:0)
进一步调试后,找到了解决方案。原来,我在Android端使用的HTTP库Volley多次发送了请求。
将Volley请求设置为重试0次似乎已解决了该问题:
MyStringRequest.setRetryPolicy(new DefaultRetryPolicy(0,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));