下面这是我用来验证支付宝返回 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 过去了,但是用户仍然停留在我的站点页面里,正确的作法该怎么做?
谢谢各位老师!