Ruby如何集成支付宝快捷支付

这篇文章将为大家详细讲解有关Ruby如何集成支付宝快捷支付,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

客户端

客户端集成移动端支付宝快捷支付,iOS和Android端很方便,使用支付宝提供的sdk就可以了,要注意的地方就是:

  • 一定要用支付宝提供的工具,生成商户自己的公钥和密钥,密钥要经过pkcs8编码。这些都可以使用支付宝提供的工具来完成。

  • 要把商户的公钥提交到支付宝。

基本上看着文档就可以很快完成集成测试。

当用户手机没有安装支付宝App,则会弹出安装支付宝App的弹窗,点确定就去下载支付宝App,点取消就弹出webview打开网页版支付宝结算。

服务端

服务端是用Ruby。

因为所有的支付请求都由客户端完成了,那么服务端只剩下了实现支付宝异步通知接口的任务。

异步通知接口有两步工作:RSA签名验证、Notify ID验证是否支付宝请求。

RSA签名验证

目前快捷支付的签名类型,只支持RSA, 所以服务端接收异步通知的接口Notify就只能用RSA来验证签名。支付RSA验证的逻辑是这样的(文档里也有描述,理解这个逻辑有助于顺利完成验证):

  • 商户使用支付宝提供的工具生成RSA公钥私钥,并把商户公钥提交给支付宝。 这一步意味着双方互换公钥。

  • 支付宝发给商户的请求是用支付宝的私钥加密的,所以必须用支付宝的公钥解密,而支付宝的公钥在文档里已经提供。

  • 商户发往支付宝的请求,必须是商户自己的私钥加密,而支付宝那边用商户的公钥解密。就是移动客户端sdk完成的工作。所以移动客户端那边一定是用商户自己的私钥,并且是经过pkcs8编码的。

理解了RSA的加密解密逻辑,我们就了解了,服务端后台要验证来自于支付宝的异步通知POST请求,必须用支付宝的公钥了。

复制文档里支付宝的RSA公钥, 换行的部分用/n代替,如下:

 
-----BEGIN PUBLIC KEY-----/nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRA/nFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih4/PrQE/nB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5Ksi/nNG9zpgmLCUYuLkxpLQIDAQAB/n-----END PUBLIC KEY-----

然后,我们使用OpenSSL::PKey::RSA类:

 
rsa = OpenSSL::PKey::RSA.new(alipay_pub_key)

alipay_pub_key是上面的支付宝公钥。
一定要上面这种格式,或者你使用工具生成符合pem格式的pem文件,否则会报错。

然后我们就可以使用rsa的verify方法验证签名了:

 
rsa.verify('sha1', Base64.decode64(sign), rsa_string.force_encoding("utf-8"))

注意,这里的sign,是支付宝请求里的签名参数, 这里的sign一定要经过base64解码。rsa_string是根据支付宝文档生成的待签名字符串。

这样,你就可以完成RSA验证了。

Notify ID验证

这个很简单, 带上支付宝文档里提供的参数,给支付验证接口发个请求就可以了。

关于“Ruby如何集成支付宝快捷支付”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/230573.html

(0)
上一篇 2022年1月15日 19:44
下一篇 2022年1月15日 19:44

相关推荐

发表回复

登录后才能评论