优草派  >   Python

python怎么接入支付宝?这篇文章超详细(附代码)

陈立鑫            来源:优草派

很多小伙伴想知道python怎么接入支付宝?那么今天小编就通过这篇文章来给大家分享下如何实现python接入支付宝功能的。感兴趣的小伙伴可以耐心阅读一下这篇文章。

python怎么接入支付宝?这篇文章超详细(附代码)

第一步,目前我们需要使用国内源,安装依赖包:pip install -i (https://pypi.douban.com/simple alipay-sdk-python)

第二步,如果我们安装第一步中出现error: Microsoft Visual C++ 14.0 is required.让安装c++,我们安装c++然后选择默认安装即可。

第三步,我们再次安装alipay-sdk-python,会出现报错关键词missing ,按以下操作即可解决。

  • 新建系统环境变量:VCINSTALLDIR  变量值:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

  • 点进来,下载Download Latest

  • 把压缩包放到python安装目录的Scripts目录中,解压缩

  • cmd进入解压缩的目录中,输入命令:set CL=/FI"%VCINSTALLDIR%\\INCLUDE\\stdint.h" %CL%

  • 输入命令:python setup.py install

第四步,然后看文尾代码实现的线下二维码支付,有其他需求可对照api自行改动

第五步,设置api

代码如下所示:

# cython: language_level=3
import os
import logging
import json
import time
import qrcode
import win32con
import win32api
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.domain.AlipayTradeCreateModel import AlipayTradeCreateModel
from alipay.aop.api.request.AlipayTradeCreateRequest import AlipayTradeCreateRequest
from alipay.aop.api.response.AlipayTradeCreateResponse import AlipayTradeCreateResponse
from alipay.aop.api.request.AlipayTradePrecreateRequest import AlipayTradePrecreateRequest
 
from alipay.aop.api.request.AlipayTradeQueryRequest import AlipayTradeQueryRequest
from alipay.aop.api.response.AlipayTradeQueryResponse import AlipayTradeQueryResponse
from alipay.aop.api.domain.AlipayTradeQueryModel import AlipayTradeQueryModel
 
'''app私钥和支付宝生成的公钥'''
app_private_key = 'app私钥'
alipay_public_key = '支付宝网站生成的公钥'
 
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s %(levelname)s %(message)s',
    filemode='a', )
logger = logging.getLogger('')
 
 
def show_qrcode(code):
    '''
    生成二维码
    :param code:
    :return:
    '''
    img = qrcode.make(data=code)
    img.save("A.jpg")
    img.show()
 
 
def get_time_out_trade_no():
    '''
    :return: 构造唯一订单号
    '''
    return str(int(time.time()) + 你的appid)
 
 
def pay():
    '''
    支付
    :return:
    '''
    # 实例化客户端
    alipay_client_config = AlipayClientConfig()
    alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do'
    alipay_client_config.app_id = '你的appid'
    alipay_client_config.app_private_key = app_private_key
    alipay_client_config.alipay_public_key = alipay_public_key
    # client = DefaultAlipayClient(alipay_client_config, logger)
    client = DefaultAlipayClient(alipay_client_config)
 
    # 构造请求参数对象
    model = AlipayTradeCreateModel()
    model.out_trade_no = get_time_out_trade_no()
    model.total_amount = "价格string"
    model.subject = "标题"
    request = AlipayTradePrecreateRequest(biz_model=model)
 
    # 执行API调用
    try:
        response_content = client.execute(request)
    except Exception as e:
        print('error', e)
    else:
        # 解析响应结果
        response = AlipayTradeCreateResponse()
        response.parse_response_content(response_content)
        # 响应成功的业务处理
        if response.is_success():
            # 如果业务成功,可以通过response属性获取需要的值
            # print(response.body)
            # print(json.loads(response.body)["qr_code"])
            show_qrcode(json.loads(response.body)["qr_code"])
        # 响应失败的业务处理
        else:
            # 如果业务失败,可以从错误码中可以得知错误情况,具体错误码信息可以查看接口文档
            print('error code')
            os.system('pause')
 
 
def check_order(order):
    '''
    订单校验
    order: 订单号
    :return:
    '''
    # 构造请求
    alipay_client_config = AlipayClientConfig()
    alipay_client_config.app_id = '你的appid'
    alipay_client_config.method = 'alipay.trade.query'
    alipay_client_config.charset = 'utf-8'
    alipay_client_config.app_private_key = app_private_key
    alipay_client_config.alipay_public_key = alipay_public_key
    client = DefaultAlipayClient(alipay_client_config)
    request = AlipayTradeQueryRequest()
    request.biz_content = {"trade_no": order}
 
    response_content = client.execute(request)
    response = AlipayTradeQueryResponse()
    response.parse_response_content(response_content)
    try:
        # print(response.send_pay_date)
        if response.code == "10000":
            # 将购买时间转换为时间戳,取当前时间做对比,如果超过十分钟pass,
            stamp_array = time.strptime(response.send_pay_date, '%Y-%m-%d %H:%M:%S')
            stamp = int(time.mktime(stamp_array))  # 转换为时间戳
            # print('本地时间转换成时间戳:', stamp)
            hour = stamp + 360
            if hour > time.time():
                print('ok!')
            else:
                print('fail!')
        if response.code == "40004":
            print("order error1!")
            os.system('pause')
        else:
            print("order error2!")
            os.system('pause')
    except Exception as e:
        print('error, check_order')
        os.system('pause')

以上就是小编给大家带来的python接入支付宝的方法了,希望大家通过阅读小编的文章之后能够有所收获!如果大家觉得小编的文章不错的话,可以多多分享给有需要的人。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行