首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PayPalRestSDK:捕获顺序时的模拟响应Instrument_Declined响应

PayPalRestSDK:捕获顺序时的模拟响应Instrument_Declined响应
EN

Stack Overflow用户
提问于 2021-03-30 03:28:41
回答 1查看 225关注 0票数 0

我一直在努力嘲笑'INSTRUMENT_DECLINED'问题,根据Paypal的说法,这是在试图捕获订单(https://developer.paypal.com/demo/checkout/#/pattern/server)后常见的错误。

正确设置头以模拟响应将帮助我模拟来自docs https://developer.paypal.com/docs/business/test-and-go-live/simulation-tests/#orders的其他错误。

我用的是拉拉维尔的后端和反应前端。

我已经得到了使用axios并调用前端的预期模拟响应:

代码语言:javascript
复制
return axios
    .post(
        `https://api-m.sandbox.paypal.com/v2/checkout/orders/${orderID}/capture`,
        {},
        {
            headers: {
                "Content-Type": "application/json",
                Authorization: "Bearer " + accessToken,
                "PayPal-Mock-Response":
                    '{"mock_application_codes":"INSTRUMENT_DECLINED"}',
            },
        }
    )
    .then((res) => {
        console.log(res);
    })

但是,我不想将accessToken暴露到前端,我更愿意在后端使用GuzzleHtttp完成所有事情。

我已经得到了积极的响应--使用'status': 'COMPLETED'而没有添加像这样的PayPal-Mock-Response头:

代码语言:javascript
复制
    $client = new \GuzzleHttp\Client();
    $response = $client->request(
        'POST',
        'https://api-m.sandbox.paypal.com/v2/checkout/orders/' . $paypalOrderId . '/capture',
        [
            'headers' => [
                'Content-Type' => 'application/json',
                'Authorization' => 'Bearer ' . $access_token,
                // 'PayPal-Mock-Response' => json_encode(["mock_application_codes" => "INSTRUMENT_DECLINED"]),
                // 'PayPal-Mock-Response' => "['mock_application_codes':'INSTRUMENT_DECLINED]",
            ],
        ],
    );

    $data = json_decode($response->getBody(), true);

但是,当添加如上面注释的代码所示的PayPal-Mock-Response头时,两个调度都返回了这个异常:

"C:\xampp\htdocs\react\React-Laravel\vinos-gdl\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php",:

"message":"Client error:POST https://api-m.sandbox.paypal.com/v2/checkout/orders/9HG50866FU785784C/capture导致了404 Not Found响应“,"exception":"GuzzleHttp\Exception\ClientException",”POST https://api-m.sandbox.paypal.com/v2/checkout/orders/9HG50866FU785784C/capture“:

这个异常,我肯定要按照我将PayPal-Mock-Response头传递到Guzzle http调用的方式来做,但是我找不到正确的方法。

任何帮助都是非常感谢的。

更新解决了**

现在的方法是发送header,如下所示:

'PayPal-Mock-Response' => json_encode(["mock_application_codes" => "INSTRUMENT_DECLINED"]),

我不知道我是否有打字错误,但我终于收到了。我还使用INTERNAL_SERVER_ERROR从服务器获得一个500 response,并为每种情况构建了一个catch

代码语言:javascript
复制
} catch (ClientException $e) {

            if ($e->hasResponse()) {
                return response()->json([
                    'msg' => 'Client Exception',
                    'error' => json_decode($e->getResponse()->getBody()),
                ], 400);
            }
            return response()->json([
                'msg' => 'Client Exception',
                'request' => $e->getRequest(),
                $e->hasResponse() ? $e->getResponse() : ""
            ]);
            // return response()->json(['msg' => 'Server Error', 'error' => report($e)]);
        } catch (BadResponseException $e) {

            if ($e->hasResponse()) {
                return response()->json([
                    'msg' => 'Uknown Exception',
                    'error' => json_decode($e->getResponse()->getBody()),
                ], 500);
            }
            return response()->json([
                'msg' => 'Uknown Exception',
                'request' => $e->getRequest(),
                $e->hasResponse() ? $e->getResponse() : ""
            ]);
        }

谢谢你的评论。

EN

回答 1

Stack Overflow用户

发布于 2021-03-30 09:26:37

代码语言:javascript
复制
            "PayPal-Mock-Response":
                '{"mock_application_codes":"INSTRUMENT_DECLINED"}',

..。

代码语言:javascript
复制
            // 'PayPal-Mock-Response' => "['mock_application_codes':'INSTRUMENT_DECLINED]",

{} (JSON对象)和[] (JSON数组)之间有一个区别。

括号中的内容不是数组,因此它的语法无效。它没有映射到PayPal所期望的任何东西,因此产生了404。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66864405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档