别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2023年最新攻略)

简介: 目前国内身份认证体系做的比较不错的大抵就是支付宝和微信两家了,支付宝的身份验证基于支付宝app的实人认证能力,采用多因子认证技术快速得出认证结果,对于多因子认证技术不太了解的朋友可移步:[别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有](https://v3u.cn/a_id_172)进行了解。其作用主要是为了解决线上实人开户、账号实名认证、账号实人登录等场景中个人身份的识别问题,比如你某一天突然心血来潮想当一把韭菜炒炒股,又不想去人多眼杂的营业厅,所以利用app远程开户,开户的过程中,你怎么证明“你是你本人”的问题。

目前国内身份认证体系做的比较不错的大抵就是支付宝和微信两家了,支付宝的身份验证基于支付宝app的实人认证能力,采用多因子认证技术快速得出认证结果,对于多因子认证技术不太了解的朋友可移步:别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有进行了解。其作用主要是为了解决线上实人开户、账号实名认证、账号实人登录等场景中个人身份的识别问题,比如你某一天突然心血来潮想当一把韭菜炒炒股,又不想去人多眼杂的营业厅,所以利用app远程开户,开户的过程中,你怎么证明“你是你本人”的问题。

首先,老规矩,做一下前置任务,注册蚂蚁金服开放平台:https://open.alipay.com/

随后创建应用

这里我们创建一个网页应用。

之后就是为应用设置秘钥,点开秘钥管理页面

对于没接触过秘钥的朋友,可以参考这篇文章:在Mac系统下生成新版支付宝(2019年4月)支付接口私钥和公钥

将生成好的应用公钥配置到页面上,同时将应用私钥和支付宝公钥分别复制一份,过一会儿会用到。

最后,别忘了记录一下应用的appid,以及确保您的应用已经开通了支付宝身份认证接口:

OK,万事俱备只欠代码,下面我们利用支付宝官方的sdk完成刷脸认证。

首先安装对应的库:

pip3 install alipay-sdk-python==3.3.398

一般情况下,我们使用bug相对少的最新版。

支付宝身份认证的流程大体分为三步:身份认证初始化服务(alipay.user.certify.open.initialize)->身份认证开始认证(alipay.user.certify.open.certify)->身份认证记录查询(alipay.user.certify.open.query)

我们首先来开发身份认证初始化服务,参考官方文档:https://opendocs.alipay.com/apis/api\_2/alipay.user.certify.open.initialize

通过传入订单号、认证人名字、身份证(或者港澳台证件)等参数,接口会返回一个唯一认证号:certify\_id,后续通过certify\_id就可以进行实体认证或者实体查询,编写test\_alipay.py:

import json  
  
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig  
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient  
from alipay.aop.api.request.AlipayUserCertifyOpenInitializeRequest import AlipayUserCertifyOpenInitializeRequest, AlipayUserCertifyOpenInitializeModel  
from alipay.aop.api.request.AlipayUserCertifyOpenCertifyRequest import AlipayUserCertifyOpenCertifyRequest  
  
from alipay.aop.api.request.AlipayUserCertifyOpenQueryRequest import AlipayUserCertifyOpenQueryRequest  
  
from alipay.aop.api.response.AlipayUserCertifyOpenCertifyResponse import AlipayUserCertifyOpenCertifyResponse  
  
import random  
import string  
  
import ssl  
ssl._create_default_https_context = ssl._create_unverified_context  
from MyQR import myqr  
  
ali_public_key = '''  
  -----BEGIN PUBLIC KEY-----  
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuv2nESi3dAvGdHcxNs1TjIMxbJt4IrhBjMZcIrBALGGHxuQVCPZjci4lcGt+oBmWGAlt3F  
这里是支付宝公钥  
  -----END PUBLIC KEY-----  
  '''  
app_private_key = '''  
  -----BEGIN RSA PRIVATE KEY-----  
  MIIEogIBAAKCAQEAnpWCj6SVbWuuldIGns4K1PB+Ir17v6BNXRvyYY3jxu2ky这里是应用私钥  
  -----END RSA PRIVATE KEY-----  
  '''  
  
config = AlipayClientConfig()  
config.app_id = '应用id'  
config.app_private_key = app_private_key  
config.alipay_public_key = ali_public_key

将应用id、支付宝公钥以及应用私钥配置好,这里注意秘钥最好加上开始与结束符。随后编写初始化逻辑:

#  身份初始化  
def ali_init():  
  
    client = DefaultAlipayClient(config)  
    request = AlipayUserCertifyOpenInitializeRequest()  
    request.biz_content = {  
        'outer_order_no': ''.join(random.sample(string.ascii_letters, 32)),  
        'biz_code': 'FACE_ALIPAY_SDK',  
        'identity_param': {  
            "identity_type": "CERT_INFO",  
            "cert_type": "IDENTITY_CARD",  
            "cert_name": "姓名",  
            "cert_no": "身份证号"  
        },  
        'merchant_config': {  
            "return_url": "https://ali.v3u.cn"  
        },  
    }  
  
    #print(request.get_params())  
    response = client.execute(request)  
    #print(response)  
    # 获取参数  
    certify_id = json.loads(response).get('certify_id')  
    print(certify_id)

这里订单号不能重复,所以使用随机模块进行生成,访问AlipayUserCertifyOpenInitializeRequest接口,测试一下:

liuyue:mydjango liuyue$ python3 "/Users/liuyue/wodfan/work/mydjango/mydjango/tests.py"  
ff8182725aae897e262fa6d0fe24692c

可以看到接口返回了一个32位的certify\_id。此时,我们可以进行第二步:身份认证开始认证(alipay.user.certify.open.certify),官方文档:https://opendocs.alipay.com/apis/api\_2/alipay.user.certify.open.certify

# 开始身份认证  
def auth_start(client, certify_id):  
  
    #client = DefaultAlipayClient(config)  
    request = AlipayUserCertifyOpenCertifyRequest()  
  
    request.biz_content = {'certify_id': str(certify_id)}  
  
    print(certify_id)  
    #print(request.get_params())  
  
    response = client.page_execute(request, http_method="GET")  
    print(response)  
    myqr.run(words=response)

将刚刚返回的certify\_id作为参数请求AlipayUserCertifyOpenCertifyRequest接口,注意采用get方式,该接口会返回一个支付宝的链接,测试一下:

def ali_init():  
  
    client = DefaultAlipayClient(config)  
    request = AlipayUserCertifyOpenInitializeRequest()  
    request.biz_content = {  
        'outer_order_no': ''.join(random.sample(string.ascii_letters, 32)),  
        'biz_code': 'FACE_ALIPAY_SDK',  
        'identity_param': {  
            "identity_type": "CERT_INFO",  
            "cert_type": "IDENTITY_CARD",  
            "cert_name": "收委",  
            "cert_no": "260104197909275964"  
        },  
        'merchant_config': {  
            "return_url": "https://lingxi.zfmix.com/user/user_authentication/"  
        },  
    }  
  
    #print(request.get_params())  
    response = client.execute(request)  
    #print(response)  
    # 获取参数  
    certify_id = json.loads(response).get('certify_id')  
    print(certify_id)  
  
    auth_start(client, certify_id)

返回值:

liuyue:mydjango liuyue$ python3 "/Users/liuyue/wodfan/work/mydjango/mydjango/tests.py"  
65bf2091bc757d1e7b7dff7f3af619f6  
65bf2091bc757d1e7b7dff7f3af619f6  
https://openapi.alipay.com/gateway.do?timestamp=2021-01-06+20%3A09%3A21&app_id=2021002119690109&method=alipay.user.certify.open.certify&charset=utf-8&format=json&version=1.0&sign_type=RSA2&sign=HYK0RJjbLLFqBplL2av9sqkgykfKV1xUKgw0Fo0oRWXoC9H%2BjTDZZJElmXVi2jbfBzikac%2B5iqETK0i%2Bz9MpBfJUC8eoCjbRyUUNTrxX7003toEKz8utabOALSlwQcutFSbVbTthB5GXzpSzHZChkiZwQVUVCw3oHholUw7%2B2RnLRno%2BmwRyi6mJ2296wQvqE962LpGKV%2FxNF5O6UaKFEyoKceOztxI%2FnXIfcRfH6mgrUTP7NhLSpLvBdIbgcuCNARmS04ZN6BL7UwjkvNglNRgAydhypJqJqv0sBXRJQ8hDfIsLV3jACpgyarJ4tQeEJP4CfTobFhA2nLsYnnEbbw%3D%3D&biz_content=%7B%22certify_id%22%3A%2265bf2091bc757d1e7b7dff7f3af619f6%22%7D  
line 16: mode: byte  
liuyue:mydjango liuyue$

这个链接只要使用支付宝app进行访问,就可以跳转到刷脸认证页面,但是如果让普通用户粘贴链接到支付宝太过于繁琐,所以我们利用myqr模块将该链接制作成二维码,用户只需要用支付宝app对二维码进行扫描即可:

pip3 install myqr

认证接口:

response = client.page_execute(request, http_method="GET")  
print(response)  
myqr.run(words=response)

随后项目内会生成一个qrcode.png

打开支付宝app,对其进行扫码操作:

最后,在身份认证完成后,调用身份认证记录查询(alipay.user.certify.open.query)查询认证状态和相关数据。官方文档:https://opendocs.alipay.com/apis/api\_2/alipay.user.certify.open.query

# 查询接口  
def auth_check(client, certify_id):  
  
    print(certify_id)  
  
    request = AlipayUserCertifyOpenQueryRequest()  
    request.biz_content = {'certify_id': str(certify_id)}  
  
    response = client.execute(request)  
  
    print(response)

同样传入certify\_id,接口为AlipayUserCertifyOpenQueryRequest,测试一下:

liuyue:mydjango liuyue$ python3 "/Users/liuyue/wodfan/work/mydjango/mydjango/tests.py"  
f35030276a08b27cdc67c26a18f57650  
f35030276a08b27cdc67c26a18f57650  
{"code":"10000","msg":"Success","material_info":"{}","passed":"F"}

如果已经认证成功会返回T,反之则是F。

需要注意的是,在没有刷脸情况下的certify\_id 有效期是23个小时,认证成功后,调用查询接口certify\_id是3个月的有效期。

结语:总体而言,坑不是很多,主要锻炼的是大家阅读文档的能力,或者说的更准确一点:通过阅读理解将文档转化为代码的能力,有意思的一点是,如果大家通读了支付宝的文档,会发现如果身份认证成功,是不可以取消的,也就是身份认证不可逆,也就是说,支付宝如果想利用你的信息干点什么的话,你没有任何反抗的能力,所以说到底,这是一个用户隐私使用权的问题,大多数情况下,国人愿意容忍国家获取或者使用自己的隐私,是因为他们觉得自己仍有监督与干预政府机构的能力或者渠道,无论是以间接还是比较激进的方式。而人们不愿意像支付宝这种商业寡头获取并运用自己的隐私,也正是因为人们知道自己在面对此类商业机构对自己隐私的利用或者滥用时,自己只能干瞪眼,搏手无策。

相关文章
|
6月前
|
缓存 自然语言处理 监控
阿里巴巴 item_review 接口深度分析及 Python 实现
阿里巴巴开放平台的 item_review 接口用于获取商品用户评论数据,支持评论内容、评分、买家信息等多维度分析,助力产品优化与市场策略制定。
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
6月前
|
缓存 监控 算法
item_get - Lazada 商品详情详情接口深度分析及 Python 实现
Lazada商品详情接口item_get可获取商品全维度数据,包括价格、库存、SKU、促销及卖家信息,支持东南亚六国站点,适用于竞品监控、定价策略与市场分析,助力跨境卖家精准决策。
|
6月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
6月前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。
|
6月前
|
缓存 监控 算法
唯品会item_search - 按关键字搜索 VIP 商品接口深度分析及 Python 实现
唯品会item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商数据分析、竞品监控与市场调研。结合Python可实现搜索、分析、可视化及数据导出,助力精准决策。
|
6月前
|
缓存 监控 算法
苏宁item_get - 获得商品详情接口深度# 深度分析及 Python 实现
苏宁易购item_get接口可实时获取商品价格、库存、促销等详情,支持电商数据分析与竞品监控。需认证接入,遵守调用限制,适用于价格监控、销售分析等场景,助力精准营销决策。(238字)
|
6月前
|
监控 算法 数据安全/隐私保护
唯品会 item_get - 获得 VIP 商品详情接口深度分析及 Python 实现
唯品会item_get接口通过商品ID获取商品详情,支持价格、库存、促销等数据抓取,适用于电商分析、竞品监控与价格追踪,结合Python实现可高效完成数据获取、分析与可视化,助力精准营销决策。

热门文章

最新文章

推荐镜像

更多