nodejs支付宝支付过程加签验签

1.首先如图如图先了解详细的基本流程。(https://docs.open.alipay.com/204/105297/)服务端:2,3,9,10步。

2.首先由客户端去支付宝申请沙箱,(开发者中心)(https://openhome.alipay.com/platform/appDaily.htm),申请完毕会看到如下:

 

之后会用到的数据有APPID,与支付宝公钥,以及支付宝 关

3. 下载RSA应用公钥与应用私钥生成软件https://docs.open.alipay.com/291/105971/

,然后生成公钥与私钥。将私钥按对应的生成方式RSA2或RSA,传入到沙箱环境。得到对应的支付宝公钥。

4.开始进行加签,这里所必要的参数为:(https://docs.open.alipay.com/204/105465)

Biz_content必要参数:

然后开始正式进行加签。

参数解析:app_id支付宝沙箱中的app_id

Method,format,Charset,sign_type,version:参考官方文档

Sign:

Timestamp:获得当前时间,转成官方文档的格式:YYYY-MM-DD HH:MM:ss

Notify_url:验签完,支付成功后支付宝调用的 址。(需要将这个 址配置到外 中,局域 不可以,并将这个具体 址的写入到加签时的那个请求参数中);

Biz_content:独立创建一个json对象,然后配置好之后再转换成json字符串格式。

      具体参数:

1.   subject:商品标题

2.   out_trade_no:商户 站的唯一订单 ,可以4位随机数+当前时间毫秒数(这里一定要每次不一样,不然支付成功一次之后,再次支付客户端会提示系统繁忙)

3.   total_amont: 订单总金额

4.   product_code:官方文档固定值

组合过程:最后组合成如下实例格式的待签名字符串:(如下支付宝官方示例:)

app_id=2015052600090779&biz_content={“timeout_express”:”30m”,”product_code”:”QUICK_MSECURITY_PAY”,”total_amount”:”0.01″,”subject”:”1″,”body”:”我是测试数据“,”out_trade_no”:”IQJZSRC1YMQB5HU”}&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http://domain.merchant.com/payment_notify&sign_type=RSA2&timestamp=2016-08-2520:26:31&version=1.0

然后,先将其转换为数组,然后用sort(),方法进行自然排序,(貌似按字母开头排序a,b,c),

然后读取商户的应用私钥,(要转成pem文件,即将生成的txt文件的后戳名改为.pem,然后在private_key里的第一行加入 BEGIN PRIVATE KEY, 第二行为实际私钥,第三行ENDPRIVATE KEY ,【公钥的话将PRIVATE改为PUBLIC】)

Var sign =crypto.createSign(“RSA-SHA256”); //创建一个编码方式

sign.update(content);//用这种编码方式修改排序后的待签名字符串(content)

sign.sign(privateKey, ‘base64’); //用商户私钥进行加密,返回给我们真正的签名:sign

【这讲的模糊,反正就是这么整】

 

 

再将其与待签名字符串进行拼接,拼接格式依然为 aaa=111&bbb=222&ccc=333。

然后遍历新拼接好的数据,再将其先转为数组,然后用sort(),方法也进行自然排序,然后遍历所有的key-value值,将所有的value进行encodeURIComponent(value)编码一次【这是必须的】。再次拼接成(aaa=111&bbb=222&ccc=333)格式的字符串,然后将最终的字符串返回给前端。前端通过沙箱中的支付宝 关 最终字符串,得到支付宝返回的数据

 

5.验签

https://docs.open.alipay.com/200/106120

将前端返回的数据得到后:参数(param)实例格式如下

这里得到其,键: alipay_trade_precreate_response所对应的value。{“code”:”10000″,”msg”:”Success”,”out_trade_no”:”6141161365682511″,”qr_code”:”https://qr.alipay.com/bax03206ug0kulveltqc80a8″}  , 即是我们所需要待验签字符串。(如果是JSON格式,用strinfiy()方法将其转换为json字符串格式)。

然后用param得到加密方法,与签名。即sign_type,sign

再读取沙箱给的支付宝公钥,public_key

然后用这四项,value,sign,sign_type,public_key。进行验证签名

代码如下

Var verify;

verify.update(content);//content为value(待验签的数据)

verify.verify(publicKey, sign, ‘base64’)//验证签名,然后返回false,或者true。将其返回给客户端

 

参考文献:https://blog.csdn.net/njweiyukun/article/details/79478455

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年4月10日
下一篇 2018年4月10日

相关推荐