论坛首页 编程语言技术论坛

使用ActiveMerchant支持支付宝,财付通和快钱

浏览 16061 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-03-09  
2008-10-11更新,支持支付宝notify方法。http://www.iteye.com/post/693987

ActiveMerchant 很好很强大,但是网上介绍的都是信用卡支付的方式,对于国内这种类Paypal的支付方式很少。
这种支付方式在ActiveMerchant中称之为integration模式,可能是由于编写起来并不难,介绍它的文档很少,我编写的时候是完全按照paypal的代码写的。

http://code.google.com/p/activemerchant/issues/detail?id=114
是我提交的Patch,以支付宝为例,在使用前需要指定 ActiveMerchant::Billing::Integrations::Alipay::KEY和Alipay::ACCOUNT,具体这两个值放在哪里,根据个人喜好,直接放在插件中,或者放在environment.rb中,或者放在lib文件夹下require进来都可以。

使用的时候,需要在页面中使用下面这样的代码(参见 http://activemerchant.rubyforge.org/classes/ActiveMerchant/Billing/Integrations/ActionViewHelper.html)
 <% payment_service_for 1000, 'paypalemail@mystore.com',
                              :amount => 50.00,
                              :currency => 'CAD',
                              :service => :paypal,
                              :html => { :id => 'payment-form' } do |service| %>

   <% service.customer :first_name => 'Cody',
                      :last_name => 'Fauser',
                      :phone => '(555)555-5555',
                      :email => 'codyfauser@gmail.com' %>

   <% service.billing_address :city => 'Ottawa',
                             :address1 => '21 Snowy Brook Lane',
                             :address2 => 'Apt. 36',
                             :state => 'ON',
                             :country => 'CA',
                             :zip => 'K1J1E5' %>

   <% service.invoice '#1000' %>
   <% service.shipping '0.00' %>
   <% service.tax '0.00' %>

   <% service.notify_url url_for(:only_path => false, :action => 'notify') %>
   <% service.return_url url_for(:only_path => false, :action => 'done') %>
   <% service.cancel_return_url 'http://mystore.com' %>
   <% service.sign %>
 <% end %>

helper.rb中的工作也很重要,
mapping :tax, 'tax_no'

说明 service.tax '0.00' 会生成 <input type='hidden' name='tax_no' value='0.00'/>这样一个表单字段。
mapping :customer, :email => 'c_email', :address => 'c_address'

说明 service.customer :email => 'alipay@iteye.com', :address => '上海' 会生成
<input type='hidden' name='c_email' value='alipay@iteye.com'/>和
<input type='hidden' name='c_address' value='上海'/>两个字段。
对于不会用于生成Hash签名,基本不会变的字段,可以在helper的intialize方法中生成
def initialize(order, account, options = {})
  super
  add_field('bank_type', 0)
end

=> '<input type="hidden" name="bank_type" value="0"/>'


service.sign方法,是我为生成签名添加的。在这个方法里最后使用 add_field 'sign', sign把hash值填入到表单里。(好像只有国内的支付接口需要计算hash值)
# in lib/active_merchant/billing/integrations/tenpay.rb

def sign
            add_field('sign',
                      Digest::MD5.hexdigest("cmdno=#{cmdno}&date=#{date}&bargainor_id=#{account}" +
                      "&transaction_id=#{transaction_id}&sp_billno=#{order}&total_fee=#{amount}" +
                      "&fee_type=#{currency}&return_url=#{return_url}&attach=#{attach}&key=#{KEY}"))
end


返回方式有两种,notify和return。可以理解为异步和同步方式,一般notify方法还需要acknowlege,也就是通知对方收到。目前支付宝的notify模式尚未支持,若要使用需要参照paypal的实现。这里先看return模式。

Return类只需要两个方法 success? 和 message,使用的时候也很简单
def OrderController < ApplicationController
  include ActiveMerchant::Billing::Integrations

  def alipay_return
    r = Alipay::Return.new(request.query_string)
    unless @result = r.success?
      logger.warn(r.message)
    end
  end
   发表时间:2008-09-02  
还有人这样用过吗?
0 请登录后投票
   发表时间:2008-09-25  
还有更新吗?最近在用alipay,说不定可以一起把代码完善一下
看到todo里面写着
It need two more works:

1.Add notifications support to alipay.

2.Complete the test
0 请登录后投票
   发表时间:2008-09-25  
cquaker 写道
还有更新吗?最近在用alipay,说不定可以一起把代码完善一下
看到todo里面写着
It need two more works:

1.Add notifications support to alipay.

2.Complete the test

notifications支持已经加好了,其实很简单。测试还没有加,不过我有一个计算出支付宝需要的url的方法可以提供。

旧的代码还有不完善的地方,一直没愿意提交,争取十一前提交吧。

其实我这个东西就是按照PayPal的方式写的,写好以后发现支付宝就是学的PayPal。但是支付宝没有test模式,所以为了测试支付宝花了我0.01*20个大洋。
0 请登录后投票
   发表时间:2008-09-25  
我不太懂,我想请教下,这个支持网上银行的支付吗
0 请登录后投票
   发表时间:2008-09-25  
right now 写道
我不太懂,我想请教下,这个支持网上银行的支付吗

否,网上支付不等于网上银行。等百付宝出来的,谁按照这个方式写一个百付宝支持的。
0 请登录后投票
   发表时间:2008-09-26  
right now 写道
我不太懂,我想请教下,这个支持网上银行的支付吗



             这个不直接和网银打交道是和支付网关打交道的。

 

0 请登录后投票
   发表时间:2008-09-26  
花花公子 写道
cquaker 写道
还有更新吗?最近在用alipay,说不定可以一起把代码完善一下
看到todo里面写着
It need two more works:

1.Add notifications support to alipay.

2.Complete the test

notifications支持已经加好了,其实很简单。测试还没有加,不过我有一个计算出支付宝需要的url的方法可以提供。

旧的代码还有不完善的地方,一直没愿意提交,争取十一前提交吧。

其实我这个东西就是按照PayPal的方式写的,写好以后发现支付宝就是学的PayPal。但是支付宝没有test模式,所以为了测试支付宝花了我0.01*20个大洋。


支付宝和paypal比缺少很多东西,目前比较头疼的是没有批量打款的接口。
0 请登录后投票
   发表时间:2008-09-26  
花花公子 写道
right now 写道
我不太懂,我想请教下,这个支持网上银行的支付吗

否,网上支付不等于网上银行。等百付宝出来的,谁按照这个方式写一个百付宝支持的。


有个头疼的地方就是国内很多支付网关没有沙盒模式,往往都需要先签约后使用,支付宝就是一个例子,不知道百度的这个如何?
0 请登录后投票
   发表时间:2008-10-07  
cquaker 写道

支付宝和paypal比缺少很多东西,目前比较头疼的是没有批量打款的接口。



支付宝有批量打款的接口,我在项目中用了
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics