我已经将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,没有列出金额。
答案 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
中加入此内容。
答案 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