作者:黄智铭铭铭铭_216 | 来源:互联网 | 2023-05-18 03:23
python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装)写在前面事先说明,本人不是大佬,我只是在不断探索的途中找到了解决这个问题的
python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装)
写在前面
事先说明,本人不是大佬,我只是在不断探索的途中找到了解决这个问题的方法,之前在网上搜索的时候没有看到相关文章,所以就来简单讲一下。
正文
借着蚂蚁金服小程序大赛开通了支付宝小程序个人开发者,尝试将一个微信小程序的项目移植到支付宝上,支付宝对于用户唯一id的获取比微信要复杂很多,微信只需要提供Appid、**和用户的请求码,但是支付宝要求使用一套复杂的签名机制。
根据开发文档简单写一个返回user_id的函数(更多示例可以看阿里的开发文档换取授权访问令牌):
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.request.AlipaySystemOauthTokenRequest import AlipaySystemOauthTokenRequest
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from json import loads
//传入客户端发来的请求码
def Agetid(code_id):
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私钥*
alipay_client_config.alipay_public_key = *阿里公钥*
AlipayClient = DefaultAlipayClient(alipay_client_config)
request = AlipaySystemOauthTokenRequest()
request.grant_type='authorization_code'
request.code = code_id
user_info_dict = AlipayClient.execute(request)
print(loads(user_info_dict))
Agetid(code_id)
其中一些基本的参数必须得有,签名是最让人头疼的地方,好在蚂蚁金服已经提供了一套针对不同语言的SDK,由于后端服务器是用python写的,便安装 alipay-sdk-python。
首先尝试pip install alipay-sdk-python
失败,原因是pycrypto安装失败,分析报错+查阅资料,和MSVC运行库有关系,下载MSVC运行库合集安装,重新尝试,还是失败,继续查阅资料……
折腾了半天也安不上去!
那么我们不妨换一个思路:强行将SDK源码怼进去!
先找到alipay-sdk-python和pycrypto两个包,并下载源码
alipay-sdk-python 3.2.53
pycrypto 2.6.1
其中alipay-sdk-python有whl包,但我们需要的是.tar.gz
下载好后用压缩软件解压。
其中的alipay文件夹就是我们需要的源码,将它复制到项目目录。
我们需要的将lib下的Crypto文件夹复制到项目目录
然后运行程序测试Agetid函数,发现还是有一个问题:
ImportError: cannot import name '_AES'
找到异常位置:Crypto\Cipher\AES.py
from Crypto.Cipher import _AES
搜索文件,并没有发现_AES这个包,索性把下划线去掉,保存运行,完美解决!!!
PS:我承认最后的操作是我懵的。