背景

简单介绍一下对接支付宝支付的流程。这个东西不难,但网上的资料纷繁复杂,老程序员没有耐心一步步跟着文档走,往往会跟着各种博客入坑。

1.github是最好的工具

https://github.com/alipay/alipay-sdk-python-all

做支付宝支付,和对接别的接口感觉不一样,文档很杂,博客很杂,demo也杂。直到看见这篇文档,豁然开朗。

引用一下readme.rst

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import tracebackfrom alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.FileItem import FileItem
from alipay.aop.api.domain.AlipayTradeAppPayModel import AlipayTradeAppPayModel
from alipay.aop.api.domain.AlipayTradePagePayModel import AlipayTradePagePayModel
from alipay.aop.api.domain.AlipayTradePayModel import AlipayTradePayModel
from alipay.aop.api.domain.GoodsDetail import GoodsDetail
from alipay.aop.api.domain.SettleDetailInfo import SettleDetailInfo
from alipay.aop.api.domain.SettleInfo import SettleInfo
from alipay.aop.api.domain.SubMerchant import SubMerchant
from alipay.aop.api.request.AlipayOfflineMaterialImageUploadRequest import AlipayOfflineMaterialImageUploadRequest
from alipay.aop.api.request.AlipayTradeAppPayRequest import AlipayTradeAppPayRequest
from alipay.aop.api.request.AlipayTradePagePayRequest import AlipayTradePagePayRequest
from alipay.aop.api.request.AlipayTradePayRequest import AlipayTradePayRequest
from alipay.aop.api.response.AlipayOfflineMaterialImageUploadResponse import AlipayOfflineMaterialImageUploadResponse
from alipay.aop.api.response.AlipayTradePayResponse import AlipayTradePayResponselogging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filemode='a',)
logger = logging.getLogger('')if __name__ == '__main__':"""设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。"""alipay_client_config = AlipayClientConfig()alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do'alipay_client_config.app_id = '[your app_id]'alipay_client_config.app_private_key = '[your app private key]'alipay_client_config.alipay_public_key = '[alipay public key]'"""得到客户端对象。注意,一个alipay_client_config对象对应一个DefaultAlipayClient,定义DefaultAlipayClient对象后,alipay_client_config不得修改,如果想使用不同的配置,请定义不同的DefaultAlipayClient。logger参数用于打印日志,不传则不打印,建议传递。"""client = DefaultAlipayClient(alipay_client_config=alipay_client_config, logger=logger)"""系统接口示例:alipay.trade.pay"""# 对照接口文档,构造请求对象model = AlipayTradePayModel()model.auth_code = "282877775259787048"model.body = "Iphone6 16G"goods_list = list()goods1 = GoodsDetail()goods1.goods_id = "apple-01"goods1.goods_name = "ipad"goods1.price = 10goods1.quantity = 1goods_list.append(goods1)model.goods_detail = goods_listmodel.operator_id = "yx_001"model.out_trade_no = "20180510AB014"model.product_code = "FACE_TO_FACE_PAYMENT"model.scene = "bar_code"model.store_id = ""model.subject = "huabeitest"model.timeout_express = "90m"model.total_amount = 1request = AlipayTradePayRequest(biz_model=model)# 如果有auth_token、app_auth_token等其他公共参数,放在udf_params中# udf_params = dict()# from alipay.aop.api.constant.ParamConstants import *# udf_params[P_APP_AUTH_TOKEN] = "xxxxxxx"# request.udf_params = udf_params# 执行请求,执行过程中如果发生异常,会抛出,请打印异常栈response_content = Nonetry:response_content = client.execute(request)except Exception as e:print(traceback.format_exc())if not response_content:print("failed execute")else:response = AlipayTradePayResponse()# 解析响应结果response.parse_response_content(response_content)print(response.body)if response.is_success():# 如果业务成功,则通过respnse属性获取需要的值print("get response trade_no:" + response.trade_no)else:# 如果业务失败,则从错误码中可以得知错误情况,具体错误码信息可以查看接口文档print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)"""带文件的系统接口示例:alipay.offline.material.image.upload"""# 如果没有找到对应Model类,则直接使用Request类,属性在Request类中request = AlipayOfflineMaterialImageUploadRequest()request.image_name = "我的店"request.image_type = "jpg"# 设置文件参数f = open("/Users/foo/Downloads/IMG.jpg", "rb")request.image_content = FileItem(file_name="IMG.jpg", file_content=f.read())f.close()response_content = Nonetry:response_content = client.execute(request)except Exception as e:print(traceback.format_exc())if not response_content:print("failed execute")else:response = AlipayOfflineMaterialImageUploadResponse()response.parse_response_content(response_content)if response.is_success():print("get response image_url:" + response.image_url)else:print(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)"""页面接口示例:alipay.trade.page.pay"""# 对照接口文档,构造请求对象model = AlipayTradePagePayModel()model.out_trade_no = "pay201805020000226"model.total_amount = 50model.subject = "测试"model.body = "支付宝测试"model.product_code = "FAST_INSTANT_TRADE_PAY"settle_detail_info = SettleDetailInfo()settle_detail_info.amount = 50settle_detail_info.trans_in_type = "userId"settle_detail_info.trans_in = "2088302300165604"settle_detail_infos = list()settle_detail_infos.append(settle_detail_info)settle_info = SettleInfo()settle_info.settle_detail_infos = settle_detail_infosmodel.settle_info = settle_infosub_merchant = SubMerchant()sub_merchant.merchant_id = "2088301300153242"model.sub_merchant = sub_merchantrequest = AlipayTradePagePayRequest(biz_model=model)# 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段response = client.page_execute(request, http_method="GET")print("alipay.trade.page.pay response:" + response)"""构造唤起支付宝客户端支付时传递的请求串示例:alipay.trade.app.pay"""model = AlipayTradeAppPayModel()model.timeout_express = "90m"model.total_amount = "9.00"model.seller_id = "2088301194649043"model.product_code = "QUICK_MSECURITY_PAY"model.body = "Iphone6 16G"model.subject = "iphone"model.out_trade_no = "201800000001201"request = AlipayTradeAppPayRequest(biz_model=model)response = client.sdk_execute(request)print("alipay.trade.app.pay response:" + response)

这里唯一要注意的是当下需要哪种场景。这里不细说,笔者做的是最后一种,注意seller_id可以传空。

2.关于沙盒

笔者没用沙盒模式,据说有时会碰到莫名奇妙付款失败的情况。建议后来者直接线上干吧。

3.关于开发者社区

附下网址:https://forum.alipay.com/mini-app/home

笔者以前很少有进入社区,并在社区提问的习惯。这次支付宝开发者社区给了我很好的体验,回复很快,大概5分钟以内,也很精准。

特别是回调环节,由于看不到错误,无法精准调试。和支付宝客服人员联调,确实方便很多。

4.注意 alipay-sdk-python的版本

这边服务器上一个旧的版本,跑起来一直出错,很难找原因。为此也折腾了好一会。笔者现在用的是(当前日期2022年6月14日):

alipay-sdk-python          3.6.72
aliyun-python-sdk-core     2.13.35
aliyun-python-sdk-dysmsapi 2.1.1

alipay.trade.app.pay相关推荐

  1. 支付宝:APP支付接口2.0(alipay.trade.app.pay)

    本章是跟支付宝进行签约对接商户服务端(也就是自行开发的JAVA后端),做此记录. 文献基本都来源于支付宝,详情请看支付宝官方文档:APP支付 目录 系统交互图 服务端demo 配置参数 获取APPID ...

  2. 支付宝电脑网站支付 alipay.trade.page.pay

    只涉及支付接口 其他接口没有使用 支付宝官方文档:https://docs.open.alipay.com/270/105899/ 支付接口文档 https://docs.open.alipay.co ...

  3. alipay.trade.page.pay 解决vue项目下 支付宝支付不能在新窗口打开收银台的问题

    由于PC端扫码支付,返回的是个form表单形式,需要在新窗口打开支付宝收银台如下 1.提前创建一个dom 2.将获取到的form表单放入进去,再通过js触发from里面的input type='sub ...

  4. aliPay支付宝APP支付操作流程

    [TOC] aliPay支付宝APP支付操作流程 1 注册帐号&官方文档解析 在支付宝商家中心注册帐号,已经拥有支付宝帐号的用户,直接登录商家中心即可(同一个支付宝帐号,可以既是买家也是商家) ...

  5. alipay html5 app,H5App支付宝开发详解

    var orderID = justep.UUID.createUUID(); if (!navigator.alipay) { alert("没有打入com.justep.cordova. ...

  6. app pay开发遇到的坑

    集成apple pay需要的资料: https://developer.apple.com/apple-pay/ about Apple Pay Apple Pay 安全性与隐私政策概览 在开发App ...

  7. php tp5支付宝app支付,支付宝APP支付 统一下单 php服务端 tp5

    { $data = input('post.'); Loader::import('/alipay/aop/AopClient',EXTEND_PATH); $aop = new \AopClient ...

  8. 支付宝APP支付 统一下单 php服务端 tp5

    /*支付宝第三方支付 * *生成APP支付订单信息 * @param number uid 用户id * @param string token 用户token * @param number oid ...

  9. 支付宝 统一支付 php,支付宝APP支付 统一下单 php服务端 tp5

    { $data = input('post.'); Loader::import('/alipay/aop/AopClient',EXTEND_PATH); $aop = new \AopClient ...

最新文章

  1. 了解Access安全性
  2. 极致无边界!2021 神策数据 Tech-Day 即将开幕
  3. Android WebView 开发详解(二)
  4. mysql+自动还原备份_Mysql 自动备份与恢复
  5. 安徽高中计算机会考知识点,安徽高中会考语文知识点
  6. centos使用vnc实现远程访问图形化界面
  7. oracle11g的用户名是什么,oracle11g默认用户名和密码
  8. 安装程序未能打开日志文件_安装和启动日志错误 | Adobe Creative Suite 6、Adobe Creative Suite 5.5、Adobe Creative Suite 5...
  9. 开始使用Mac OS X——致Mac新人
  10. cm11 android l,【鹰眼出品】安卓4.4.4 CM11已刷,流畅度爆表!《转》
  11. 探究CSS3中的transition和transform属性方法使用
  12. 一个漂亮的暗系色调网站主页,外表美观。
  13. mysql中计算最大回撤_基金最大回撤算例(Java 1.8)
  14. 转变磁盘格式(转成gpt)
  15. 软件测试工程师发展前景好吗?
  16. 软件测试之第一章 软件测试和测试环境
  17. 快速复制粘贴小工具txmouse
  18. 使用阿里云实现营业执照的查询
  19. myeclipse的server视图经常报nullpoint
  20. Python 实现黑白棋

热门文章

  1. VPS是干嘛用的?有哪些知名牌子?与云服务器有什么区别?
  2. POJ 3179Corral the Cows(离散化+二分)
  3. 基于ymir2.0版本搭建本地化调试的环境
  4. Html实现滚动字幕效果
  5. PHP项目部署报错之:open_basedir限制目录
  6. In silico design of MHC class I highbinding affinity peptides through motifsactivation map
  7. 《GrowingIO指标体系与数据采集》读书笔记
  8. 大话计算机知识流程图,大话数据结构 -- 整理归纳(1)
  9. 微信开发者工具git 删除项目
  10. 计算机网络(第7版) - 第八章 互联网上的音频/视频服务 - 习题