如何正确添加headers,paypal教程?

How to properly add headers, paypal tutorial?

我正在做 paypal 教程服务器端集成。 用 PHP。 我有问题。

我想测试资金失败,最后一部分 https://developer.paypal.com/docs/business/checkout/server-side-api-calls/handle-funding-failures/

我想我在正确的位置添加了模拟 header 但什么也没做,它一直说 Transaction completed 。 正确的表达方式是什么? 贝宝说:

In the call to Capture payment for order, include the PayPal-Mock-Response header with the mock_application_codes value set to INSTRUMENT_DECLINED. Sample code: -H "PayPal-Mock-Response: {"mock_application_codes" : "INSTRUMENT_DECLINED"}"
<script>
    // Render the PayPal button into #paypal-button-container
    paypal.Buttons({

      // Call your server to set up the transaction
      createOrder: function() {
        return fetch('examplecreateorder.php', {
          method: 'post',
          headers: {
            'content-type': 'application/json'
          }
        }).then(function(res) {
          return res.json();
        }).then(function(data) {
        
          return data.id;
        });
      },
      // Call your server to finalize the transaction
      onApprove: function(data) {
        return fetch('examplecaptureorder.php', {
            method: 'post',
            headers: {
              'content-type': 'application/json',
              'PayPal-Mock-Response': {
                'mock_application_codes': 'INSTRUMENT_DECLINED'
              }
            },
            body: JSON.stringify({
              orderID: data.orderID
            })

          }

        ).then(function(res) {

          return res.json().catch(error => console.error('Error:', error));
        }).then(function(orderData) {
          // Three cases to handle:
          //   (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()
          //   (2) Other non-recoverable errors -> Show a failure message
          //   (3) Successful transaction -> Show confirmation or thank you

          // This example reads a v2/checkout/orders capture response, propagated from the server
          // You could use a different API or structure for your 'orderData'
          var errorDetail = Array.isArray(orderData.details) && orderData.details[0];

          if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
            return actions.restart(); // Recoverable state, per:
            // https://developer.paypal.com/docs/checkout/integration-features/funding-failure/
          }

          if (errorDetail) {
            var msg = 'Sorry, your transaction could not be processed.';
            if (errorDetail.description) msg += '\n\n' + errorDetail.description;
            if (orderData.debug_id) msg += ' (' + orderData.debug_id + ')';
            return alert(msg); // Show a failure message
          }

          // Show a success message

          alert('Transaction completed by  + orderData.payer.name.given_name);
 
        })
      }
    }).render('#paypal-button-container');
  </script>

在 headers 中,PayPal-Mock-Response 的值应该只是一个字符串而不是 object:

... 
headers: {
    'content-type': 'application/json',
    'PayPal-Mock-Response': '{"mock_application_codes" : "INSTRUMENT_DECLINED" }'
},
...

请注意在 OP 代码中指定为 object 文字的区别:

'PayPal-Mock-Response': {
    'mock_application_codes': 'INSTRUMENT_DECLINED'
}

以及将 PayPal-Mock-Response 的值视为字符串的工作代码:

'PayPal-Mock-Response': '{"mock_application_codes" : "INSTRUMENT_DECLINED" }'