使用 ActiveMerchant 自定义 Paypal Express 的评论页面
我正在使用 ActiveMerchant 使我的 Rails 应用程序能够访问 Paypal 的 Express Checkout。 我想在评论页面上包含订单详细信息,如下所述:https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing
这可以做到吗?
目前,我的控制器代码如下所示:
def paypal
#currently, options is unused, I'm not sure where to send this info
options = {
:L_NAME0=>"Tickets",
:L_QTY0=>@payment.quantity,
:L_DESC0=>"Tickets for #{@payment.event_name}",
:L_AMT0=>@payment.unit_price
}
#the actual code that gets used
setup_response = gateway.setup_purchase(@payment.amount,
:ip=> request.remote_ip,
:return_url=> url_for(:action=>:confirm, :id=>@payment.id, :only_path=>false),
:cancel_return_url => url_for(:action=>:show, :id=>@payment.id, :only_path=>false)
)
redirect_to gateway.redirect_url_for(setup_response.token)
end
如果我想做的事情是可能的,我需要更改什么?
I am using ActiveMerchant to give my rails app access to Paypal's Express Checkout.
I would like to include the Order Details on the Review Page as described here: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing
Can this be done?
Currently, my controller code looks like this:
def paypal
#currently, options is unused, I'm not sure where to send this info
options = {
:L_NAME0=>"Tickets",
:L_QTY0=>@payment.quantity,
:L_DESC0=>"Tickets for #{@payment.event_name}",
:L_AMT0=>@payment.unit_price
}
#the actual code that gets used
setup_response = gateway.setup_purchase(@payment.amount,
:ip=> request.remote_ip,
:return_url=> url_for(:action=>:confirm, :id=>@payment.id, :only_path=>false),
:cancel_return_url => url_for(:action=>:show, :id=>@payment.id, :only_path=>false)
)
redirect_to gateway.redirect_url_for(setup_response.token)
end
If what I'm trying to do is possible, what do I need to change?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
确保您的
activemerchant
版本不低于1.12.0
。希望这有帮助:)
Make sure you have
activemerchant
version not less than1.12.0
.Hope this helps :)
@Soleone
我尝试你的解决方案,但对我不起作用。
我认为xml结构不正确,订单项目有多个,所以应该像这样
但我真的不知道正确的结构,现在正在寻找。
====更新
我找到了 SOAP api 文档, https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_soap_r_SetExpressCheckout#id09BHC0QF07Q
但也不起作用,谁可以帮忙?
=====更新====
我尝试了添加PaymentDetails参数的方法,但似乎仍然不起作用,我找到了SetExpressCheckoutReq xml的架构, http://www.visualschema.com/vs/paypal/SetExpressCheckoutReq/ ,没有 PaymentDetails 的定义,谁以前做过这个东西,希望对您有所帮助。
======最终版========
我已经修复了这个问题,新版本的ActiveMerchant支持订单详情审核,mwagg已经推送了这个补丁,大家可以使用这个版本 https://github.com/mwagg/active_merchant
@Soleone
I try your solution,but don't work for me.
I think the xml structure is not right,the order items is multiple,so should like this
But really I don't know the correct structure,looking for now.
====Update
I found the SOAP api doc, https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_soap_r_SetExpressCheckout#id09BHC0QF07Q
But also doesn't work,who can help?
=====UPDATE====
I tried the method of adding PaymentDetails parameter,but seems still not work,I found the schema of SetExpressCheckoutReq xml, http://www.visualschema.com/vs/paypal/SetExpressCheckoutReq/ , there is no definition of PaymentDetails,who did this stuff before,hope for your help.
======FINAL========
I have fixed this issue,new version of ActiveMerchant support the order details review,and mwagg pushed the patch about this,you guys can use this version https://github.com/mwagg/active_merchant
您可以在此表中查看可用参数(仅中间列适用,因为 activemerchant 使用 SOAP API):
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing#id086NA300I5Z__id086NAC0J0PN
为了最好地理解 activemerchant 是如何工作的,可能需要直接查看其实现。您可以看到相关参数被插入到 SOAP XML 请求中(当前),从第 98 行开始,其中插入了
OrderTotal
:https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal_express。 rb#L98
请注意如何从
options
哈希中获取参数,以便您可以在此处看到为每个参数传递的正确符号。在您列出以下参数的情况下,您可以这样做:
但请注意:
activemerchant 目前不支持
name
、quantity
和amount
字段。您必须分叉存储库并自己插入这些内容并使用您的项目副本。当您查看代码并了解它是如何与其他代码一起完成时,这真的非常简单。例如,要添加订单名称、商品数量和商品单价,您可以在插入
OrderDescription
之后添加这些行:希望有帮助!
更新:
好的,我认为根据 SOAP API 的 XML 架构,您似乎必须在 activemerchant 中这样指定它:
并且您将像这样在 Rails 应用程序中传递所有项目:
希望效果更好,祝您好运!
You can see the available parameters in this table (only the middle column applies as activemerchant is using the SOAP API):
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing#id086NA300I5Z__id086NAC0J0PN
To best understand how activemerchant does it is probably to look directly into the implementation. You can see the relevant parameters getting inserted in the SOAP XML request (currently) starting at line 98 where the
OrderTotal
gets inserted:https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal_express.rb#L98
Notice how the parameters are fetched from the
options
hash so you can see the correct symbol to pass for each one here.In your case as you listed the following parameters, you would do it like this:
Note though:
The
name
,quantity
andamount
fields are currently not support in activemerchant. You would have to fork the repository and insert these yourself and use your copy of the project. It's really very straightforward when you look at the code and see how it is done with the other ones.For example to add the order name, item quantity and item unit price you would put these lines after the
OrderDescription
gets inserted:Hope that helps!
UPDATE:
Okay I think according to the XML Schema for the SOAP API it looks like you have to specify it like this in activemerchant:
And you would pass all your items in your Rails app like this:
Hope that works better, good luck!
我也遇到了让它发挥作用的问题。解决方案是所有商品的金额总和必须是订单的小计,其中小计、运费、手续费和税费的总和必须等于订单的总价值。我的贝宝控制器看起来像这样:
工作正常
I also had problems to get this to work. The solution is that the sum of the amount of all items must be the subtotal of the order, where the subtotal, shipping, handling and tax must sum up to the total value of the order. My paypal controller looks like this:
Works fine