支付宝当面付方案(个人免签方案)

作者作为个人开发者,想接入支付功能,所以了解了下目前支付相关的方案,发现大体有以下几种(参见xpay):

支付宝和微信官方支付接口:基本都需要企业资格才能开通,最起码也要是个体工商户才可以(有营业执照)。
第三方支付平台:例如图灵支付,xpay等,支持个人开发者,但是手续费太高。
野路子:网上有开源方案是监听支付宝app收款通知,实现收款,例如PaysApi、绿点支付等,本质上依然是采用挂机监听的策略,但针对的是移动端支付宝或微信的收款通知消息,成本高,配置麻烦,需24小时挂台安卓手机,不免费
以上方案要么没有企业资质,要么太麻烦,要么太贵,幸好发现了支付宝当面付(支持个人开通,但是需要门店照片,这个百度就可以)。

营业执照是可选的,不上传的话,限制单笔收款≤1000,单日收款≤5W,对于个人开发者足够了。
我已经使用python封装了支付宝当面付sdk,并集成到了flask中,下面是github地址
python封装了支付宝当面付sdk

支付宝当面付集成到flask

效果图

支付宝当面付
接入流程
点击在这里进入,登陆支付宝账户选择立即接入。
经营内容选择百货零售-超市-超市(非平台类)
营业执照可不上传
店铺招牌 百度即可
提交申请后十多分钟就可收到通过通知。
开发流程
成功接入以后,可以在蚂蚁金服开放平台网页&移动应用中,看到我的应用列表中多了一个“应用2.0签约******”的应用:

现在我们可以开发接入了,总体分为以下几个步骤(参考当面付文档当面付开发流程):

  • 配置当面付公钥私钥
    • 找到“应用2.0签约******”的应用,点击右侧查看详情
    • 支付宝官方提供了密钥生成工具,很简单,使用工具生成应用公钥和私钥,应用公钥设置到支付宝,应用私钥保存到本地,应用公钥设置到支付宝后,支付宝会生成一个支付宝公钥,保存到本地。具体参见这里
  • 开发:我是使用python作为后端,使用这个开源库,下面是简单代码示例:
from alipay import AliPay
import time

# 密钥工具生成的私钥,和支付宝公钥(我保存在了文件中)
app_private_key_string = open("app_private_key.pem").read()
alipay_public_key_string = open("alipay_public_key.txt").read()

print(alipay_public_key_string)
'''
这里打印应该是这种格式(如果支付宝密钥生成工具生成的密钥没有头尾要自己加上)
私钥格式:
-----BEGIN RSA PRIVATE KEY-----
    base64 encoded content
-----END RSA PRIVATE KEY-----

公钥格式:
-----BEGIN PUBLIC KEY-----
    base64 encoded content
-----END PUBLIC KEY-----
'''

alipay = AliPay(
    appid="2019***********",   # 应用列表中“应用2.0签约******”的appid
    app_notify_url=None,    # 默认回调url
    app_private_key_string=app_private_key_string,  # 应用私钥
    alipay_public_key_string=alipay_public_key_string,  # 支付宝公钥
    sign_type="RSA2", # RSA 或者 RSA2(具体要看你的密钥是什么类型)
    debug=False  # 默认False
)

out_trade_no = "out_trade_no_123"
# 创建订单
result = alipay.api_alipay_trade_precreate(
    subject="test subject",  # 订单标题
    out_trade_no=out_trade_no,  # 订单号(不可重复)
    total_amount=0.1    # 订单金额,单位元
)

print(result)
# 这里应该打印出{'code': '10000', 'msg': 'Success', 'out_trade_no': 'out_trade_no_123', 'qr_code': 'https://qr.alipay.com/bax05832mvaotxhcpjeh6074'}
# 其中用qr_code生成二维码,支付宝扫描即可付款

# check order status
paid = False
for i in range(30):
    # check every 3s, and 10 times in all
    print("now sleep 3s")
    time.sleep(3)
    result = alipay.api_alipay_trade_query(out_trade_no=out_trade_no)
    if result.get("trade_status", "") == "TRADE_SUCCESS":
        paid = True
        break
    print("not paid...")

# order is not paid in 30s , cancel this order
if paid is False:
    print("支付失败,取消订单")
    alipay.api_alipay_trade_cancel(out_trade_no=out_trade_no)
else:
    print("支付成功")

完整的项目代码前往 http://armpay.cn 下载,配置几个参数即可拥有属于自己的当面付支付接口。

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值