python支付_玩转京东支付(python)

说明

做了微信。支付宝和京东支付之后,发现,最扯蛋的支付,肯定是京东支付,要完整开发京东支付,必须要看完京东支付开发者文档的官网每一个角落,绝对不能凭你的任何经验去猜测有些流程,比如公私钥加解密(不看官网,保证你后悔)、发送请求的方式(form表单提交,看了官网你会发现好怪异),支付同步跳转(还是post,fk),支付成功后返回居然没有支付订单号(完全靠自己去维护,fk)

技术描点

首先要去看官网的:http://payapi.jd.com/。 项目使用的是pc网页支付

一定要仔细的看这些参数的说明

特殊参数说明如下:

1) 在以上的请求参数中,商户号是在注册开通京东支付功能的时候,京东支付商户管理系统为用户分配的。

2) 用户账号是商户系统的用户账号。

3) 交易流水号是用来标识每次支付请求的号码,需要商户保证在每一次支付请求的时候交易流水号唯一,多次请求不能使用同一交易流水号,否则京东支付服务在处理后面的支付请求时,会把此交易当做重复支付处理。

4) 签名规则详见:“接口安全规范-签名算法”;

5) 为保证信息安全,表单中的各个字段除了merchant(商户号)、版本号(version)、签名(sign)以外,其余字段全部采用3DES进行加密。

二. 生成签名

签名过程分为两步,首先是将原始参数按照规则拼接成一个字符串S1,然后再将S1根据签名算法生成签名字符串sign。

参数原始字符串的拼接规则:

1) 对于POST表单提交的参数:所有参数按照参数名的ASCII码顺序从小到大排序(字典序),使用URL键值对的方式拼接成字符串S1,(如:k1=value1&k2=value2&k3=value3…)

2) 对于XML报文交互的参数:将XML报文的各行去掉空格后直接拼接成一行字符串作为S1。如果报文只有一行则直接作为S1,不需要再进行拼接。

生成签名的过程如下:

1) 对拼接的参数字符串S1通过SHA256算法计算摘要,得到字符串S2;

2) 对字符串S2使用私钥证书进行加密,并进行base64转码,得到签名字符串sign; 接收方收到报文后先进行base64解码,再使用公钥证书解密,然后验证签名的合法性。

注意事项:

1) 空参数不参与签名;

2) 参数列表中的sign字段不参与签名;

3) 为了简化处理,标签也参与签名;

4) 参数区分大小写;

5) RSA加密的规则为:由交易发起方进行私钥加密,接收方进行公钥解密;(可以使用RSA公私钥校验工具来校验商户RSA公私钥是否匹配)

6) 系统会对商户公钥证书的有效性进行校验。

签名代码:

def get_sign_str(params, is_compatible=False):

"""

生成签名的字符串

Args:

params: 签名的字典数据

is_compatible: 是否是兼容模式(对字典中value值为空的也签名)

Returns:

返回签名

"""

raw = [(k, params[k]) for k in sorted(params.keys())]

if is_compatible:

order_str = "&".join("=".join(kv) for kv in raw)

else:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值