PayPal Express Checkout中缺少金额和订单摘要

时间:2011-11-21 00:55:15

标签: codeigniter paypal

我已经将paypal与paypal_helper集成到codeigniter中(没有记得我找到它的地方,但它是Paypals原始代码的稍微重写版本,用于快速结账。我尝试调用此函数,

  

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

将$ paymentAmount作为int发送,$ currencyCodeType作为“NOK”发送,$ paymentType作为“Sale”发送。

在Sandbox和live中,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,没有列出金额。

3 个答案:

答案 0 :(得分:50)

由于您未传递所谓的“订单项详情”(产品数据),因此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发送订单项详细信息,请在SetExpressCheckout API请求中添加以下内容:

// 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 express checkout problem

答案 1 :(得分:14)

经过对Messy Paypal docs网站的广泛阅读后,这是2013年的一份简短的ExpressCheckout指南。我希望在PayPal支付页面和商家交易历史页面上显示项目详细信息。

Paypal文档链接

您可以直接在Web浏览器上调用以下url方法,相应地更新令牌和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 =成功或ACK = SuccessWithWarning,读取TOKEN值

将用户浏览器重定向到Paypal网站,提供令牌值

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

用户使用paypal帐户或信用卡。 Paypal重定向用户返回或取消网址。 重定向目标网址获取令牌 PayerID 参数值。 交易尚未完成,我们必须调用doExpressCheckoutPayment方法。

在屏幕上显示确认对话框(使用OK,CANCEL按钮)或简单的外壳 提交交易并显示“谢谢,购买已完成”消息。 用户已经在paypal网站上接受了付款,并希望最终确定交易。

您可以在同一个请求 - 响应处理程序中提交事务或使用 异步后台任务。 Paypal网站可能暂时不可用,所以不要指望它立即起作用。

如果重定向成功,则提交事务,使用令牌和付款

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 =成功并验证字段

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并写入logtable。

PAYMENTREQUEST_0_TRANSACTIONID=11E585715B622391E
CORRELATIONID=4534b683c335f

如果有任何逻辑错误,我愿意收到评论。

答案 2 :(得分:0)

检查此链接,希望它在某种意义上有所帮助: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECGettingStarted

PAYMENTREQUEST_0_AMT=amount //for amount