[网站功能]在flask中使用沙箱添加测试支付宝付款功能

这三天为了接入支付宝支付功能,我把支付宝的网站支付开发文档看了好几遍,又百度了好多别人的资料,发现都没有我能直接拿来用的代码。而且支付宝官方文档的各种链接也是6的飞起....经常看着看着就迷路了...然后支付宝自己的python包,使用实例写的也是简单的飞起...看了下评论貌似较烂,而且网上确实找不到使用官方包部署的,我一个新手完全不好直接拿官方包,所以还是选了现在最成熟的python-alipay-sdk包
先安装这个包
pip install python-alipay-sdk
这个包的中文文档虽然也不全面,但是比官方的好多了已经!
这个链接是python-alipay-sdk包的链接
再放几个开发中用的到的支付宝官方文档
因为官方文档链接漫天飞...不太好一次找到所有需要的文档
沙箱使用文档
电脑支付文档
各种官方SDK包

在正式接入支付宝前,像我这样的新手还是要先走一个沙盒,顺顺代码的,我们一步一步来~

点开沙箱,查看APP_ID,配置秘钥和网关

打开你的沙箱,出行的APP_ID就是测试中要用的APP_ID


沙箱

使用openssl或者淘宝提供的工具生成秘钥,将公钥上传到图中【RSA|查看应用公钥】,上传成功后,点击【查看支付宝公钥】
这里需要注意的是!你的网站中配置需要APPID/你的私钥/支付宝的公钥,这里是支付宝的公钥!不是你生成的公钥,地下另一个秘钥折磨了我好久....我一直没弄明白为啥有2秘钥,还一个RSA,一个RSA2。。。我现在也忘记这个秘钥是干啥的了,反正就是不用管它就可以了!
这里支付宝网关注意一下,和正式部署的区别是多了dev,在正式部署的时候记得更换下网关
好像还有哪里需要写这个授权回调地址
讲真...这个应用网关和授权回调地址也折磨了我一下...还有这个实例部分给的alipay的网址,整的我以为就是填这个网址
实际:不用管应用网关,授权回调地址是用户支付成功后,重定向的路由,我这里填了http://localhost:5000/callback/alipay

授权回调地址

写付款API

使用包写付款,还是非常开心轻松哒!
首先我们新建一个Alipay对象,用于以后所有的支付接口调用

alipay = AliPay(
    appid='你的APPID',
    app_notify_url=None,  # 默认回调url
    sign_type="RSA2",
    alipay_public_key_path=os.path.join(os.getcwd(),
         'key', 'alipay_public_key'), #这里换成你的路径
    app_private_key_path=os.path.join(os.getcwd(), 
         'key', 'app_secret_key'),#这里换成你的路径
    debug=True
)

这里需要注意的是
两个Key参数还有对应的alipay_public_key_string,字符串版本,但是不要用那个,我用了会报错,就老老实实用path
这里的debug决定了是沙箱支付宝网关还是正式网关
创建完alipay,我们写支付API
这个支付API就是网页中点击了支付按钮后转到的路由

# 这里的trade_id是我订单ID,用来取订单信息的,这里测试可以去掉不需要的
@pay.route('/start_pay/<int:trade_id>')
def start_alipay(trade_id):
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no="2018081104",# 这个No每次测试不能重复的
        total_amount=0.01,
        subject='测试支付',
        return_url=url_for('.paid', _external=True)
        #这个回调url要和第一步里面在支付宝配置的一致
    )
    alipay_url = current_app.config['ALIPAY_URL'] + "?" + order_string
    return redirect(alipay_url)

这里先根据订单信息创建order_string
然后把这个查询字符串缀到支付宝网关URL上
最后跳转到这个URL,下面是我写到config的ALIPAY_URL

ALIPAY_URL = 'https://openapi.alipaydev.com/gateway.do'

最后一步!写回调路由,处理信息

支付成功后,用户会被调转到Return_url上,这里的GET请求查询字符串已经包含了所有订单信息,我的订单后面的GET格式如下:

http://localhost:5000/callback/alipay?charset=utf-8
&out_trade_no=20180811
&method=alipay.trade.page.pay.return
&total_amount=0.01
&sign=这里有很长的sign用于验签
&trade_no=2018081121001004730200696550
&auth_app_id=2016091800540443&version=1.0
&app_id=2016091800540443&sign_type=RSA2
&seller_id=2088102176193440
&timestamp=2018-08-11+12%3A03%3A11)

这里虽然已经啥都有了,但是作为一个GET请求...还是不要依赖它确定用户是否支付成功了,但是这里我找不到应该咋验签,反正支付宝也说了不要依赖这玩意,
支付宝说用户支付成功后会通过3个渠道返回此次支付信息:
1.GET同步请求
2.POST异步请求,就是发form到你的notify_url,但是这里我测试了没有反应的....所以我没用这个方式
3.自己调用查询API:alipay.trade.query接口查询订单详情
因为官方也说了,可以跳过2,直接使用方法3验证,所以我在get请求中,没有用get到的querystring,而是发起了查询:

# 有一点注意,我在蓝图中定义了url_prefix=callbak,所以这里路由只写了alipay
@pay.route('/alipay')
def paid():
    # 向alipay发起查询
    result = alipay.api_alipay_trade_query(out_trade_no="2018081104")
    #这里的out_trade_no可以用GET到的
    if result.get("trade_status", "") == "TRADE_SUCCESS":
        return result.get('trade_no') #这里使用支付宝返回的订单号来显示支付成功
    return 'fail'

最后就是测试了,打开第二步中的路由,用沙箱提供的测试账号和密码登陆支付,就完成啦~ 接下来就按着业务需求重新整理下2个view啦~


沙箱支付账号

以上
等我完成部署正式上线了再追加一份正式部署版

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容