https://github.com/kikyous/unionpay 因为公司的业务需要银联支付的接口,所以花时间做了这个 gem 目前还处于开发测试阶段 现在已有所有官方 sdk 的功能
欢迎 ISSUE 和 PR。
看了一下源码,银联支付不需要数字签名吗?我只看到了 md5 相关的代码,没看到用私钥签名的部分,从源码中找出的 sign
方法如下:
def self.sign(args)
sign_str = args.sort.map do |k,v|
"#{k}=#{v}&" unless UnionPay::SignIgnoreParams.include? k
end.join
Digest::MD5.hexdigest(sign_str + Digest::MD5.hexdigest(UnionPay.security_key))
end
最近 rails 的网站也需要通过银联支付功能,不知道楼主的 gem 有人试过了没,有没有支付成功? 谢谢
#10 楼 @hust_tulip 都说了因为公司需要我才做的,我们的项目现在就用的这个 gem, 你说的私钥就是 UnionPay.security_key 吧
@kikyous, 我读了银联在线的《商户支付接口手册》,post 给银联的 form 中,有一个 input field
,其中 name 为 ChkValue
, value 就应该为支付订单的数字签名。
签名的过程应该用摘要算法计算订单的消息摘要 MD,然后用你的私钥对消息摘要 MD 加密,结果即为你订单的数字签名,最后将订单和数字签名一起向银联发出请求支付。
我在代码中没看到完整的签名相关部分,所以才确认你的 gem 有没有在实践中交易成功,还是你们的项目仍在开发过程中,从没怀疑该 gem 是你们项目中的一部分。
#12 楼 @hust_tulip 我没有仔细读过文档,这个 gem 基本是从官方的 php sdk 翻译过来的。 里面的订单的签名是 name 为 signature 的 input field
#14 楼 @kikyous 我看的是这份文档,好像咱们看到的不同 http://console.chinapay.com/NetPayClient/new/NetPayClient_Manual.pdf