Theos和Python集成支付宝

简介

  • 环境
    • macOS端:Theos、Xcode11.3、macOS10.14.6
    • 客户端:iPhone6、iOS11、unc0ver越狱
    • 服务端:Centos8、Python3.8
  • iOS正向开发中集成支付宝可以参照官方文档
  • iOS逆向开发参照此文

Theos集成

  • 下载iOS_SDK,解压后把AlipaySDK.frameworkAlipaySDK.bundle放入Tweak根目录
  • 在Makefile中添加支付宝依赖和framework
    1
    2
    TweakName_FRAMEWORKS += WebKit SystemConfiguration CoreTelephony QuartzCore CoreText CoreGraphics CoreMotion CFNetwork
    TweakName_LDFLAGS += -lz -lc++ AlipaySDK.framework/AlipaySDK
  • 使用支付宝功能
    1
    2
    3
    4
    5
    #import "AlipaySDK.framework/Headers/AlipaySDK.h"

    [[%c(AlipaySDK) defaultService] payOrder:orderString fromScheme:@"app://" callback:^(NSDictionary *resultDic) {

    }];

Python集成

macOS端

  • macOS下载支付宝开放平台开发助手,进行安装,安装完成,打开软件设置如下
    • 密钥长度:RSA2
    • 密钥格式:PKCS1(非JAVA适用)
  • 选择后,点击生成密钥,就会生成应用私钥应用公钥.

支付宝开发者网站

  • 添加APP支付能力
    • 点击进入开发者网站,找到我的应用->网页和移动应用,找到你新建的应用。
    • 点击应用->概览->能力列表->添加能力->APP支付,审核通过后就可以使用APP支付功能了,
  • 点击应用信息,找到接口加密方式,点击设置/查看,把macOS上生成的应用公钥粘贴到这里后就会生成支付宝公钥

Python项目中

  • 使用pip3 install alipay-sdk-python安装支付宝服务端
  • Python项目中新建alipay_public_key.txt放入支付宝公钥,新建app_private_key.txt放入应用私钥
  • 返回订单字符串代码为:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import os
    from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
    from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
    from alipay.aop.api.domain.AlipayTradeAppPayModel import AlipayTradeAppPayModel
    from alipay.aop.api.request.AlipayTradeAppPayRequest import AlipayTradeAppPayRequest
    # 获取公私钥字符串
    abspath = os.path.abspath(os.path.join(os.getcwd(), "order"))
    private_path = os.path.join(abspath, 'app_private_key.txt')
    public_path = os.path.join(abspath, 'alipay_public_key.txt')
    app_private_key = open(private_path).read()
    alipay_public_key = open(public_path).read()
    # 设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。
    alipay_client_config = AlipayClientConfig()
    alipay_client_config.app_id = 'Your AppId'
    alipay_client_config.app_private_key = app_private_key
    alipay_client_config.alipay_public_key = alipay_public_key
    # 构造唤起支付宝客户端支付时传递的请求串示例:alipay.trade.app.pay
    model = AlipayTradeAppPayModel()
    model.timeout_express = "90m" # 超时时间
    model.total_amount = "9.9" # 金额
    model.subject = "商品购买" # 购买时显示的标题
    model.out_trade_no = time.strftime('%Y%m%d%H%M%S') + '_' + udid # 订单号
    request = AlipayTradeAppPayRequest(biz_model=model)
    request.notify_url = "http://xxx.com/api/order" # 回调地址
    # 得到客户端对象。
    client = DefaultAlipayClient(alipay_client_config=alipay_client_config, logger=logger)
    orderSting = client.sdk_execute(request) # 返回给客户端使用