10219
SetExpressCheckoutにて商品名、購入金額等を渡していますが、PayPal購入画面に商品名、購入金額等が表示されなくて困ってます。  
指定方法は以下のようになっています。  
何か指定方法に不備があるか、わかる方ご解答お待ちしております。

```

    $ec_request =& PayPal::getType('SetExpressCheckoutRequestType');
    $ec_request->setVersion("51.0");
    
    // Set request-specific fields.
    $paymentAmount = ($aPurchaseCommodityInfo->unit_price * $aPurchaseCommodityInfo->amount) + $aPurchaseCommodityInfo->postage;
    $currencyID = 'USD'; // or other currency code ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')
    $paymentType = 'Sale'; // or 'Order' or 'Authorization'
    
    $ec_details =& PayPal::getType('SetExpressCheckoutRequestDetailsType');
    $ec_details->setReturnURL($aReturnUrl);
    $ec_details->setCancelURL($aCancelUrl);
    $ec_details->setPaymentAction($paymentType);
    $ec_details->setNoShipping('1', 'iso-8859-1'); //PayPal画面に配送先住所未表示
    
    $amt_type =& PayPal::getType('BasicAmountType');
    $amt_type->setattr('currencyID', $currencyID);
    $amt_type->setval($paymentAmount, 'iso-8859-1'); //購入金額
    $paymentDetailsItem = &PayPal::getType('PaymentDetailsItemType');
    $paymentDetailsItem->setName($aPurchaseCommodityInfo->commodityName); //商品名
    $paymentDetailsItem->setQuantity('1', 'iso-8859-1'); //購入数
    $paymentDetailsItem->setAmount($paymentAmount, 'iso-8859-1'); //購入金額
    $ec_details->setOrderTotal($amt_type); //購入金額合計
    
    $ec_request->setSetExpressCheckoutRequestDetails($ec_details);
    
    $caller =& PayPal::getCallerServices($this->profile);
    
    // Execute SOAP request.
    $response = $caller->SetExpressCheckout($ec_request);
    
```
CC BY-SA 4.0
2015-05-15T04:06:14.233
10210
2019-12-06T20:08:06.693
2019-12-06T17:55:20.463
2376
9444
question
php paypal
PayPal購入画面について
コーディングを見る限りですが、`$paymentDetailsItem`が`$ec_details`に関連付けられていませんので、結果として`$paymentDetailsItem`での設定内容はAPIで送信されていません。

```

    $paymentDetails = &PayPal::getType('PaymentDetailsType');
    $paymentDetails->setPaymentDetailsItem($paymentDetailsItem);
    $ec_details->setPaymentDetails($paymentDetails);
    
```

のようなコーディングで、`$paymentDetailsItem`を`$paymentDetails`に関連付け、  
`$paymentDetails`を`$ec_details`に関連付けることで`$paymentDetailsItem`での設定がAPIで送信されるようになります。

なお、`$ec_request->setVersion(""51.0"");`のままですと`$paymentDetailsItem`での指定がAPIで送信されてもPayPalの決済画面に表示されませんので、これを機会に最新番号の`$ec_request->setVersion(""123.0"");`とすることをお薦めいたします。
CC BY-SA 4.0
2015-05-15T08:12:49.833
10219
2019-12-06T20:07:35.540
2019-12-06T20:07:35.540
32986
9215
10210
answer
PaymentDetailsItemをarrayで指定する際には、以下の設定が必要になります。

```

    $caller =& PayPal::getCallerServices($profile);
    $caller->USE_ARRAYKEY_AS_TAGNAME = true;
    $caller->SUPRESS_OUTTAG_FOR_ARRAY = true;
    $caller->OUTTAG_SUPRESS_ELEMENTS = array('PaymentDetailsItem');
    
```

あと、`SetExpressCheckoutRequestDetails`の`orderTotal`ではなく、`PaymentDetails`の`orderTotal`の方を使っていただくことになります。
CC BY-SA 4.0
2015-05-18T06:08:29.613
10305
2019-12-06T20:08:06.693
2019-12-06T20:08:06.693
32986
9215
10210
answer