web-dev-qa-db-ja.com

Paypal ExpressCheckoutに不足している金額と注文の概要

Paypal_helperを使用してPaypalをcodeigniterに統合しました(見つけた場所は覚えていませんが、エクスプレスチェックアウト用にPaypalsの元のコードを少し書き直したものです。この関数を呼び出してみます。

CallShortcutExpressCheckout($ paymentAmount、$ currencyCodeType、$ paymentType、$ returnURL、$ cancelURL)

$ paymentAmountをintとして、$ currencyCodeTypeを "NOK"として、$ paymentTypeを "Sale"として送信します。

サンドボックスとライブの両方で、Paypalサイトに金額は表示されません...

何が悪いのでしょうか?

編集して、私のプロセスをさらに説明します。私はこれを、主に https://www.Paypal-labs.com/integrationwizard/ecpaypal/cart.php で指定されているとおりに使用します。これはフォームなしで実行できるはずですか?関数CallShortcutExpressCheckout ?:を呼び出すと、paymentAmountを標準変数として送信できます。

$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
{
    RedirectToPayPal ( $resArray["TOKEN"] );
} 
else  
{
    //Display a user friendly Error on the page using any of the following error information returned by Paypal
    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);

    echo "SetExpressCheckout API call failed. ";
    echo "Detailed Error Message: " . $ErrorLongMsg;
    echo "Short Error Message: " . $ErrorShortMsg;
    echo "Error Code: " . $ErrorCode;
    echo "Error Severity Code: " . $ErrorSeverityCode;
}

トークンはデータベースに保存されます。ユーザーはPaypalにリダイレクトされ、金額は表示されません。

22
Øyvind

いわゆる「ラインアイテムの詳細」(商品データ)を渡していないため、Paypalは合計金額を表示しません。

現在の購入金額のみを表示したい場合は、購入者を https://www.Paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxx&useraction=commit にリダイレクトします。 ( https://www.Paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxx の代わりに)

ラインアイテムの詳細をPaypalに送信し始める場合は、SetExpressCheckoutAPIリクエストに以下を含めます。

// Total amount of the purchase, incl shipping, tax, etc  
PAYMENTREQUEST_0_AMT=300.0  
// Total amount of items purchased, excl shipping, tax, etc     
PAYMENTREQUEST_0_ITEMAMT=300.0  
// Authorize the funds first (Authorization), or capture immediately (Sale)?    
PAYMENTREQUEST_0_PAYMENTACTION=Sale  
// First item  
L_PAYMENTREQUEST_0_NAME0=Item1  
L_PAYMENTREQUEST_0_QTY0=1  
L_PAYMENTREQUEST_0_AMT0=100.00  
// Second item  
L_PAYMENTREQUEST_0_NAME1=Item2  
L_PAYMENTREQUEST_0_QTY1=1  
L_PAYMENTREQUEST_0_AMT1=200.00  

これを自分の履歴にも表示したい場合は、これもDoExpressCheckoutPaymentに含める必要があります。

これは php Paypalエクスプレスチェックアウト問題 にも投稿されました

51
Robert

乱雑なPaypalドキュメントサイトをよく読んだ後、これは2013年に機能する短いExpressCheckoutガイドです。Paypalの支払いページと販売者の取引履歴ページにアイテムの詳細を表示したいと思いました。

Paypalのドキュメントリンク

次のurlメソッドをWebブラウザーで直接呼び出し、それに応じてトークンとpayeridパラメーターを更新できます。

これはデジタル商品であるため、送料と手数料はかかりません。単一アイテムの行。金額と税金が表示されます。確認済みの配送先住所、配送先住所フィールド、許可フリーテキストメモ、支払人はPaypalアカウントを必要とせず、登録も必要ありません(solutiontype = sole)。 Paypalサイトのクレジットカードセクションをアクティブにします(landingpage = billing)。 Paypalサイトでカスタマイズされたブランドタイトルを使用します。カスタムフィールドを使用して、追跡目的で独自の値を指定します。マーチャントサイトのトランザクション履歴には、アイテムの詳細を表示する必要があります(SetExpressCheckoutメソッドとDoExpressCheckoutPaymentメソッドでアイテムの詳細を指定してください)。

SetExpressCheckoutメソッドは新しいトランザクションを開きます

https://api-3t.sandbox.Paypal.com/nvp?
    USER=<userid>
    &PWD=<pwd>
    &SIGNATURE=<mysig>
    &METHOD=SetExpressCheckout
    &VERSION=98
    &PAYMENTREQUEST_0_PAYMENTACTION=SALE
    &REQCONFIRMSHIPPING=0
    &NOSHIPPING=1
    &ALLOWNOTE=0
    &SOLUTIONTYPE=Sole
    &LANDINGPAGE=Billing
    &BRANDNAME=MY+WEBSHOP+TITLE
    &PAYMENTREQUEST_0_AMT=22.22
    &PAYMENTREQUEST_0_TAXAMT=4.30
    &PAYMENTREQUEST_0_ITEMAMT=17.92
    &PAYMENTREQUEST_0_DESC=mypurdesc
    &PAYMENTREQUEST_0_CUSTOM=custom1
    &PAYMENTREQUEST_0_CURRENCYCODE=EUR
    &L_PAYMENTREQUEST_0_NUMBER0=itemid1
    &L_PAYMENTREQUEST_0_NAME0=MyItem1
    &L_PAYMENTREQUEST_0_DESC0=Item1+description
    &L_PAYMENTREQUEST_0_QTY0=1
    &L_PAYMENTREQUEST_0_AMT0=17.92
    &L_PAYMENTREQUEST_0_TAXAMT0=4.30
    &RETURNURL=https://myserver.com/webapp/Paypal.jsp%3Fcmd=successexp
    &CANCELURL=https://myserver.com/webapp/Paypal.jsp%3Fcmd=cancelexp

応答にはACK = SuccessまたはACK = SuccessWithWarningが必要であり、TOKEN値を読み取ります

ユーザーブラウザをPaypalサイトにリダイレクトし、トークン値を指定します

https://www.sandbox.Paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=<token>

ユーザーはPaypalアカウントまたはクレジットカードを使用します。 Paypalは、URLを返すかキャンセルするようにユーザーをリダイレクトします。リダイレクト先URLは、tokenおよびPayerIDパラメーター値を取得します。トランザクションはまだ完了していません。doExpressCheckoutPaymentメソッドを呼び出す必要があります。

画面に確認ダイアログを表示するか([OK]、[キャンセル]ボタンを使用)、単純なケースでトランザクションをコミットして、「ありがとうございます。購入が完了しました」メッセージを表示します。ユーザーはすでにPaypalサイトで支払いを受け入れており、取引が完了することを期待しています。

同じ要求/応答ハンドラー内で、または非同期バックグラウンドタスクを使用してトランザクションをコミットできます。 Paypalサイトは一時的に利用できない可能性があるため、すぐに機能することを期待しないでください。

リダイレクトが成功した場合はトランザクションをコミットし、トークンとpayeridを使用します

https://api-3t.sandbox.Paypal.com/nvp?
    USER=<userid>
    &PWD=<pwd>
    &SIGNATURE=<mysig>
    &METHOD=DoExpressCheckoutPayment
    &VERSION=98
    &PAYMENTREQUEST_0_PAYMENTACTION=SALE
    &PAYMENTREQUEST_0_AMT=22.22
    &PAYMENTREQUEST_0_TAXAMT=4.30
    &PAYMENTREQUEST_0_ITEMAMT=17.92
    &PAYMENTREQUEST_0_CURRENCYCODE=EUR
    &L_PAYMENTREQUEST_0_NUMBER0=itemid1
    &L_PAYMENTREQUEST_0_NAME0=MyItem1
    &L_PAYMENTREQUEST_0_QTY0=1
    &L_PAYMENTREQUEST_0_AMT0=17.92
    &L_PAYMENTREQUEST_0_TAXAMT0=4.30
    &token=<token>
    &payerid=<payerid>

ACK = Successを読み取り、フィールドを確認します

ACK=Success
PAYMENTINFO_0_PAYMENTSTATUS=Completed
PAYMENTINFO_0_ACK=Success
PAYMENTINFO_0_AMT=22.22     total amount must match
PAYMENTINFO_0_FEEAMT=0.99   (just for fun, read Paypal comission fee)
PAYMENTINFO_0_CURRENCYCODE=EUR  currency must match

(オプション)Paypalからトランザクションの詳細を読み取ります

これは、トランザクションワークフロー中、または後で使用するためにトークンが保存されている場合はいつでも使用できます。

https://api-3t.sandbox.Paypal.com/nvp
    ?USER=<userid>
    &PWD=<pwd>
    &SIGNATURE=<mysig>
    &METHOD=GetExpressCheckoutDetails
    &VERSION=98
    &token=<token>

応答パラメータを読み取ります。

ACK=Success
CHECKOUTSTATUS=PaymentActionCompleted
PAYMENTREQUEST_0_AMT=22.22
PAYMENTREQUEST_0_TAXAMT=4.30
PAYMENTREQUEST_0_CURRENCYCODE=EUR

(オプション)トランザクションID、相関ID、トークンIDを読み取って保存し、ログテーブルに書き込みます。

PAYMENTREQUEST_0_TRANSACTIONID=11E585715B622391E
CORRELATIONID=4534b683c335f

論理エラーがあればコメントをお待ちしております。

14
Whome

このリンクを確認してください。何らかの意味で役立つことを願っています: https://cms.Paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECGettingStarted

 PAYMENTREQUEST_0_AMT = amount // for amount 
0