Gem ruby 银联支付接口

kikyous · 2013年12月20日 · 最后由 kikyous 回复于 2014年01月07日 · 6787 次阅读

https://github.com/kikyous/unionpay 因为公司的业务需要银联支付的接口,所以花时间做了这个 gem 目前还处于开发测试阶段 现在已有所有官方 sdk 的功能

  • front_pay 前台支付
  • front_pay 通知
  • back_pay 后台支付
  • back_pay 通知
  • query 查询

欢迎 ISSUE 和 PR。

其实银联还有一个 wap 移动端的接口 想当初刚到公司做的就是银联的接入 楼主的 gem 里没有查询支付是否成功的接口么...

#2 楼 @zj0713001 查询的接口还没有

#2 楼 @zj0713001 现在所有的功能都有了

#4 楼 @kikyous nice 已 star 简单提示一下哈 业务逻辑中判定是否支付成功最好不要以通知为准 最好主动发起一次查询来确认

噗 又一个 @Reialipay 风格

#7 楼 @jasl 哈哈,仿照着做的

看了一下源码,银联支付不需要数字签名吗?我只看到了 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

#15 楼 @hust_tulip 你看的这个好像是 cs 架构用的,我觉得你不会用 ruby 去做桌面应用

#16 楼 @kikyous 当然不会,绝对是 web 应用。文档里面有不同架构/语言的例子,也有 php 的例子,对于这些常用的语言 C/Java/C#/php,银联都有相应的封装好的 lib 来调用,但是对于 RoR,就需要自己实现。

#16 楼 @kikyous 确认一下,bs 结构的只做摘要算法,而不需要数字签名吗?如果是这样,就简单多了,但只能防止数据不被串改,而不能确认 post 数据来源的身份。

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