新手问题 关于支付宝接口的集成 (验证 notify 部分)

rankjie · 2012年12月13日 · 最后由 rankjie 回复于 2013年01月28日 · 13508 次阅读

下面这是我用来验证支付宝返回 notify 时,sign 是否正确的代码,但是它一直都没能验证正确,不知道怎样的加密算法才是对的呢= =?

def verify_sign params.delete("sign_type") #sign_type 默认就是 MD5 sign = params.delete("sign") values = {} params.keys.sort.each do |k| values[k] = params[k]; end sign.downcase == Digest::MD5.hexdigest(CGI.unescape(values.to_query) + ALIPAY_KEY) end

然后下面这里有一段支付宝 post 来的数据样例: params= { "buyer_email"=>"[email protected]", "buyer_id"=>"", "exterface"=>"trade_create_by_buyer", "is_success"=>"T", "logistics_fee"=>"0.00", "logistics_payment"=>"SELLER_PAY", "logistics_type"=>"EXPRESS", "notify_id"=>"" "notify_time"=>"2012-12-14 00:22:22", "notify_type"=>"trade_status_sync", "out_trade_no"=>"", "payment_type"=>"1", "receive_address"=>"null", "seller_email"=>"[email protected]", "seller_id"=>"", "subject"=>"test", "total_fee"=>"0.01", "trade_no"=>"", "trade_status"=>"TRADE_FINISHED", "sign"=>"", "sign_type"=>"MD5" }

哪位老师能解答一下?谢谢!

-------------------下面的问题已解决-------------------- 第一次做 web 开发,边学边用的 Rails,所以可能问的问题非常初级,还望各位老师多多包涵。

我申请了标准双接口 (个人只能申请这个),正准备做一个充值金额的功能。 如果我采用 form+POST 的形式进行支付宝订单提交,那么整体的流程是否是这样: 1.用户输入要充值的金额

2.表单内容提交到我的处理页面

3.我的处理页面把其他参数添加上,并且进行 sign 操作,假设得到 MD5 加密的值为 MMMDDD555

4.把所有参数 POST 到支付宝的接口 (是否可以使用 Net::HTTP.post_form?)

然后呢?数据 POST 过去了,但是用户仍然停留在我的站点页面里,正确的作法该怎么做?

谢谢各位老师!

直接用页面嵌入 form,然后提交到支付宝网关,会跳转到支付宝的收银台页面的,可以去看看https://github.com/flyerhzm/activemerchant_patch_for_china

#1 楼 @kenshin54 谢谢!这个 plugin 我在安装的时候总是被提示 [You have Rails 2.3-style plugins in vendor/plugins!.......]然后安装就不成功了: (

另外,接口已经做好了。

post 数据,你不是跳转,肯定还在你的界面。 post 到支付宝的信息中肯定有回调地址,应该有两个,一个是跳转用的,一个是通知用的。 在你的应用中,用户点击支付,后台你 post 数据,界面提示用户跳转到他在你的应用中的支付列表,然后显示他在你的网站上的支付,支付宝通知你支付成功之后,会调用你在 post 中给支付宝的通知地址,然后他会调用你的通知地址,再通知地址的后台,你会修改用户在你的网站的支付信息。 然后用户在你的网站查询他的支付信息的时候,就会发现状态变换了。

#3 楼 @woaigithub 谢谢:) . 我后来还是用了相对简单的 get 方法,直接拼链接 redirect_to 过去了

新的问题就不开新帖询问了> <

哎,一个月了也没人回答:( 但是我好像自己找到问题所在了,是网站的证书(startssl)不被支付宝认可,导致异步通知根本没有被成功送达

需要 登录 后方可回复, 如果你还没有账号请 注册新账号