支付宝支付原理

1.支付宝支付流程

https://www.lanqiao.cn/vip

在这里插入图片描述

在这里插入图片描述

2.新建支付宝应用

# 访问"支付宝开发平台"登录,可以访问开发者中心 
https://open.alipay.com/platform/home.htm 
# 可以参考"电脑网站支付" 熟悉电脑支付整体流程 
https://docs.open.alipay.com/270/105899/

2.1 第一步:创建应用(这里使用沙箱环境测试)

沙箱环境说明
	1.线上环境需要创建应用,因为我们不是企业,没有资质,所以只能申请沙箱环境
	2.简单来讲沙箱环境就是给开发者使用的测试环境
	3.沙箱环境地址: https://openhome.alipay.com/platform/appDaily.htm?tab=info

在这里插入图片描述

 2.2 按照官方要求生成秘钥

在这里插入图片描述

2.3 把生成的app公钥粘贴到沙箱环境的app中

沙箱环境地址: https://openhome.alipay.com/platform/appDaily.htm?tab=info

在这里插入图片描述

 

2.4 查看沙箱环境账号和密码

# 买家信息 
买家账号foqhub3270@sandbox.com 
登录密码111111 
支付密码111111 
# 商家账号uqqgmd6602@sandbox.com 
商户UID2088102180143385 
登录密码111111

3.测试支付宝获取支付宝扫码链接

3.1 支付宝开发网址

支付宝开放平台: https://open.alipay.com/platform/home.htm 
支付宝沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info 
支付宝开发者文档:https://openhome.alipay.com/developmentDocument.htm 
电脑网站支付流程:https://docs.open.alipay.com/270 
生成签名:https://docs.open.alipay.com/291/106103/ 
python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

3.2 说明

1.阿里官方没有提供python对接支付的sdk,但是python库中有非官方的sdk包可以使用
2.python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
3.使用起来非常简单,只要传入几个必要的参数就可以完成
4.由于支付对安全要求很高,所以要理解对接支付宝安全的流程: 公钥加密、私钥解密 这八个字

3.3 app_private_key.pem app私钥

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxXRdL+ALzW4AW6ndW5/ZD44ppPsfm9If/oc3pc1gmqjT7z73swlUhotEPZnLsk8hq dEoR9fg/+0XijuJQqnU+CU3
pptdXgkIcyq/fyvpRgkX2OA9G7CHEveZ97leaOG2RI1i2JvgUiM+O2LiDA AbTWtk8Chx+j2Z+R5s22zgI/y+45bcMht/YDxAbmgDFkBq32PyHlu3gTjoB7SqBZ8ecU8AKBxSjUPB3t5 ls4T2P3Xy/ER2/PFcnh0vZGQsZR
bHQ6wS1Jsql/3Wu1+tvHvIiKKXPGUcZe7czfqfwcIwVPrntEdPYC2J USzC94vFwcMNAlai/aiWDCc4jDt1
W7oetwIDAQABAoIBAQDBNBESjUk/I0laZ6Vex9PeMp5w/f95umrv5 GMA6yqBanyldplsJ877Lz4AgIId4O
vxe+TMF2HjSZxk98hg4Eiw3cnMTe1X28LW3Zcu2kqQ6sjYvuFMPL iOSJPxHwJP4bs07Jsxk6Q0+qMj/Kdu
UpRkdpb3nruXvbrxVWHyel//FM6jqCvxxFWBhCikDjNPZEgPJa+ at1viN/u1eOoEO5/SBkVYePF6O3Nx8r
R20nG2KfvvLkfWfBvVnIWdmkUmqMX2EIXF+af66FlcgWTszvkx pIS3KnHGK5rHe2+uTuJp57MY0WnJq5v6vKwhOADvNiwLg2dwLDSq9SRJzWnsm+RBAoGBAP0wA92l9Ilag gLD8WCFeVICiNWGlA2jSYfindMXX9rf6xo
8hSr/YWfyxu6guBqvo7b/onG7DwyrDOvlq7X/kQNbtxkis/ oYBeWssF6ab10CtFuF1wUP5jXoaAMUIy2xrX
cmO5bJsvTE6O9VZophlSo0uvXxBJRSgqfEo0wEET6HAoG BAMel3KitQQArxiD8SHDE6q1hb5elIDTyYi
JI65EagWO41xcBMduu0tjZyoTbL6MWKHCxxXuOsWpQjtuF 8FVesDMBBpC9VLO4IvnQDZb7lKXWgEnMc4g
ckL+KNzgkIzYNs1jW6IYfcY82iP22AoH3xbnaYI56sH2lA RUZcUNe/3pRAoGBAPWvYSD1SEz8yco7L4A1JRwCn5tsA0EUoWa97d6IARkYTkBgV+z4ciH3gTjQNraWl2 wdthlcpmbpmRlT/gMWozY6CnvWpATcy
OQtZdv3SndcB34EazlbS04mXsAWC2js0GIddJeG1CQW695K5b0 EokWZc47yuTngsy5vbvJ1w/IDAoGAW5jpaCo1DFMJD9Evmy19ThbKEBUedaxPAdPa4DP88Te410EhEt1e t0cU92dor7ZWz32AUXPiShizslv9K+3J
gV0TGg0Dc4Ej6uFdmsvKI1wKd9FpoCUa9AYB16wcy4v1oOjYv dBnVYF70ItVEzQOb3qVmkkH+F1f5cJKi
NJo/EECgYA1OZn4LqvFsK/WG23FFcW6wvGOKjHgAfwENILiHB jHNESYBtwnRaV0Vgikz3tfC5qehmuJT+N+bjsqsqaM3ZR50/xqWx6qGenA5KbGyMkWMu4LFAuqGKz1ocH 2kjM+jc0eNRzABj7A9
ATx+1nfiKD0ehc6lrXIp71rItEuKxyO8w== 
-----END RSA PRIVATE KEY-----

3.4 alipay_public_key.pem 支付宝公钥

-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3QEBAQUAA4GNADCBiQKBgQDIgHnOn7LLILlKETd6BFRJ0GqgS2Y3mn1wMQmyh9zEy 
Wlz5p1zrahRahbXAfCfSqshSNfqOmAQzSHRVjCqjsAw1jyqrXaPdKBmr90DIpIxmIyKX
v4kPyJ/6FT FY99uhpiq0qadD/uSzQsefWo0aTvP/65zi3eof7TcZ32oWpwIDAQAB -----END PUBLIC KEY-----

3.5 测试生成支付链接

# -*- coding: utf-8 -*- 
from alipay import AliPay 

# 沙箱环境中 app 私钥 
app_private_key_string = open('app_private_key.pem').read() 
# 支付宝公钥 
alipay_public_key_string = open( 'alipay_public_key.pem').read() 

def get_alipay_url(): 
    alipay = AliPay( 
        appid="2016101800716047", # 沙箱appid 
        app_notify_url=None, # 默认回调url 
        app_private_key_string=app_private_key_string, 
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥, 
        alipay_public_key_string=alipay_public_key_string, 
        sign_type="RSA", # RSA 或者 RSA2 
        debug=True, # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址) 
    )
    # 调用支付接口 
    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + 
    order_string order_string = alipay.api_alipay_trade_page_pay( 
        out_trade_no="201612226", # 订单id,应该从前端获取
        total_amount=str(0.01), # 订单总金额 
        subject="测试阿里云付款", # 付款标题信息 
        return_url=None, # 付款成功回调地址(可以为空) 
        notify_url=None # 付款成功后异步通知地址(可以为空) 
    )
    pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string 
    print(pay_url) # 将这个url复制到浏览器,就会打开支付宝支付页面 

def query_pay(): 
    alipay = AliPay( 
        appid="2016101800716047", # 沙箱appid 
        app_notify_url=None, # 默认回调url 
        app_private_key_string=app_private_key_string, 
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥 
        alipay_public_key_string=alipay_public_key_string, s
        ign_type="RSA", # RSA 或者 RSA2 
        debug=True, # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址) 
    )
    trade_query = alipay.api_alipay_trade_query( 
        out_trade_no=20161112, # 上面生成支付码页面时传入的商品订单号 
        trade_no=None 
    )
    print(trade_query) 
    if __name__ == '__main__': 
        get_alipay_url() 
        query_pay()

''' 
trade_query 查询用户付款信息 
返回信息详情请看官方:https://docs.open.alipay.com/api_1/alipay.trade.query {
     "code": "10000", # code=10000代表支付成功 
     "msg": "Success", 
     "buyer_logon_id": "foq***@sandbox.com", 
     "buyer_pay_amount": "0.00", 
     "buyer_user_id": "2088102180228981", 
     "buyer_user_type": "PRIVATE", 
     "invoice_amount": "0.00", 
     "out_trade_no": "20161112", 
     "point_amount": "0.00", 
     "receipt_amount": "0.00", 
     "send_pay_date": "2020-02-20 21:20:48", 
     "total_amount": "0.01", 
     "trade_no": "2020022022001428981000087565", "trade_status": "TRADE_SUCCESS" 
}
'''
**生成链接地址如下**
1.https://excashier.alipaydev.com/standard/auth.htm? 2.payOrderId=79d3a024f4904f58af434843b945132f.00

 

posted @ 2020-10-14 21:55  做你的猫231  阅读(675)  评论(0)    收藏  举报