1

このcurl呼び出しをガズルに変換しようとしています:

curl https://core.spreedly.com/v1/gateways/CAL6uXHtGfDsxV2kW6apTP5JhG/purchase.xml \
-u 'Ll6fAtoVY5hTGlJEmtpo5YTS:RKOCG5D8jhgfdDSg524u5iF22XD4Io5VXmyzdCptrvHFTTSy' \
-H 'Content-Type: application/xml' \
-d '<transaction>
      <payment_method_token>ZgPNHes541EMlBN86glRDKRexzq</payment_method_token>
      <amount>100</amount>
      <currency_code>USD</currency_code>
    </transaction>'

私はこれをたくさん使うことを知っているので、どんな助けも感謝します

これは私が試したことですが、常にこのエラーが発生します「クライアントエラー応答[ステータスコード] 422 [理由フレーズ] Unprocessable Entity」

$xml =  '<transaction>\n';
$xml .=     '<payment_method_token>$payment_method_token</payment_method_token>\n';
$xml .=     '<amount>100</amount>\n';
$xml .=     '<currency_code>USD</currency_code>\n'
$xml .= '<transaction>\n';
$headers = ['Content-Type' => 'application/xml', 'auth' => ['Ll6fAtoVY5hTGlJEmtpo5YTS', 'RKOCG5D8jhgfdDSg524u5iF22XD4Io5VXmyzdCptrvHFTTSy']];
$client = new Client('https://core.spreedly.com/v1/gateways/CAL6uXHtGfDsxV2kW6apTP5JhG/purchase.xml');
$requestCurl = $client->post('', $headers, $xml,[]);
$response = $requestCurl->send()->xml();
dd($response);

ありがとう!

4

2 に答える 2

2

次のようになります。

$client = new Client('https://core.spreedly.com/v1/gateways/merchant_id');

$xml = '<...>';
$options = [
    'headers'   => [ 'Content-Type' => 'application/xml' ],
    'auth'      => ['username', 'password'],
    'body'      => $xml,
];

$response = $client->post('/purchase.xml', $options);

また、コードをもう一度見て、誤って API 資格情報を公開したかどうかを確認することもできます。

于 2015-03-17T17:50:59.520 に答える
0

クライアントを操作するために Guzzle ドキュメントを参照すると、クライアントで行われるすべてのリクエストに対して base_url、ヘッダー、および認証を設定できることがわかります。

以下の私の例と上記の Sammitch の例の違いは、ヘッダーと認証をデフォルトとしてクライアントに追加したことです。これにより、これらを各リクエストにオプションとして追加することなく、API への後続の呼び出しを行うことができます。

トラブルシューティングの目的で、http 要求と応答がすぐに利用できるように、LogSubscriber を添付するだけです。

$client = new GuzzleHttp\Client([
    'base_url' => ['https://core.spreedly.com/{version}/gateways/{merchant_id}/', [
        'version' => 'v1',
        'merchant_id' => $merchant_id
    ]],
    'defaults' => [
        'headers'       => ['Content-Type' => 'application/xml'],
        'auth'          => [$username, $pw],
]]);
/**
* Attach a log subscriber is configured to log the full request and response message using echo() calls.
**/
$client->getEmitter()->attach(new GuzzleHttp\Subscriber\Log\LogSubscriber(null, GuzzleHttp\Subscriber\Log\Formatter::DEBUG));

$response = $client->post('purchase.xml', [
    'body' => $xml
]);
于 2015-03-17T21:28:50.340 に答える