贝斯特365-365提前结束投注-365bet中国客服电话

支付宝支付 (沙箱环境)

支付宝支付 (沙箱环境)

API,就是给你提供的一个URL

https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay

1. 自己手动会URL进行处理和加密

让你跳转到这个地址:【网关?参与】 组成

网关 = https://openapi.alipaydev.com/gateway.do

参数 = {

app_id:"2016102400754054",

method:"alipay.trade.page.pay"

format:"JSON",

return_url:"支付成功之后跳转GET到的那个页面地址",

notify_url:"同时偷偷想这个地址发送一个POST请求",

charset:"utf-8",

sign_type:"RSA2",

sign:"签名",

timestamp:"2014-07-24 03:07:50",

version:'1.0',

biz_content:{

out_trade_no:"订单号",

product_code:"FAST_INSTANT_TRADE_PAY",

total_amount:11.68,

subject:"订单标题"

}

}

如果支付成功之后,服务器宕机,如何处理?

偷偷向notify_url发请求,说支付成功了,你更改下状态。

服务器宕机,支付宝访问不到,则会在24小时以内发送:支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)

我的网站接收到支付宝请求之后,返回数据不正确,同上。

返回一个字符串 "success"

https://opendocs.alipay.com/open/270/105902/

支付宝签名的过程:对参数进行处理,处理完之后再让他和网关拼接起来。

网关 = https://openapi.alipaydev.com/gateway.do

params = {

app_id:"2016102400754054",

method:"alipay.trade.page.pay"

format:"JSON",

return_url:"支付成功之后跳转GET到的那个页面地址",

notify_url:"同时偷偷想这个地址发送一个POST请求",

charset:"utf-8",

sign_type:"RSA2",

sign:"签名",

timestamp:"2014-07-24 03:07:50",

version:'1.0',

biz_content:{

out_trade_no:"订单号",

product_code:"FAST_INSTANT_TRADE_PAY",

total_amount:11.68,

subject:"订单标题"

}

}

1. 将参数中 空、文件、字节、sign 踢出。

params.pop(sign)

2. 排序,对参数中所有的key进行从小大大排序 sort(params)

并按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。

3. 将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。

待签名的字符串 = "app_id=2016102400754054&method=alipay.trade.page.pay"

注意:1.有字典应该转换为字符串; 2.字符串中间不能有空格。

json.dumps(info,separators=(",",":"))

4.使用各自语言对应的SHA256WithRSA签名函数并利用商户(应用)私钥对待签名字符串进行签名,并进行Base64编码。

result = 使用 SHA256WithRSA 函数和私钥对签名字符串进行签名

签名 = 在对result进行Base64编码

把签名再添加到会params字典中 params[sign] = 签名

注意:base64编码之后之后,内部不能有换行符 签名.replace("\n","")

5.再讲所有的参数拼接起来。

注意:在拼接URL时候不能出现 ;,(等字符, 提前将特殊字符转换URL转义的字符。

from urllib.parse import quote_plus

https://opendocs.alipay.com/open/291/105974

https://opendocs.alipay.com/open/291/106118

# pip3 install pycrypto

# 如果是 pycryptodom.xxxx.whl 下载到本地,pip install pycryptodom.xxxx.whl

# 构造字典

params = {

'app_id': "2016102400754054",

'method': 'alipay.trade.page.pay',

'format': 'JSON',

'return_url': "http://127.0.0.1:8001/pay/notify/",

'notify_url': "http://127.0.0.1:8001/pay/notify/",

'charset': 'utf-8',

'sign_type': 'RSA2',

'timestamp': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),

'version': '1.0',

'biz_content': json.dumps({

'out_trade_no': order_id,

'product_code': 'FAST_INSTANT_TRADE_PAY',

'total_amount': 1.11,

'subject': "x1"

}, separators=(',', ':'))

}

# 获取待签名的字符串

unsigned_string = "&".join(["{0}={1}".format(k, params[k]) for k in sorted(params)])

print(unsigned_string)

# 签名 SHA256WithRSA(对应sign_type为RSA2)

from Crypto.PublicKey import RSA

from Crypto.Signature import PKCS1_v1_5

from Crypto.Hash import SHA256

from base64 import decodebytes, encodebytes

# SHA256WithRSA + 应用私钥 对待签名的字符串 进行签名

private_key = RSA.importKey(open("files/skd/应用私钥2048.txt").read())

signer = PKCS1_v1_5.new(private_key)

signature = signer.sign(SHA256.new(unsigned_string.encode('utf-8')))

# 对签名之后的执行进行base64 编码,转换为字符串

sign_string = encodebytes(signature).decode("utf8").replace('\n', '')

# 把生成的签名赋值给sign参数,拼接到请求参数中。

from urllib.parse import quote_plus

result = "&".join(["{0}={1}".format(k, quote_plus(params[k])) for k in sorted(params)])

result = result + "&sign=" + quote_plus(sign_string)

gateway = "https://openapi.alipaydev.com/gateway.do"

pay_url = "{}?{}".format(gateway, result)

相关推荐