fzlee / alipay

Python Alipay(支付宝) SDK with SHA1/SHA256 support
Other
1.29k stars 378 forks source link

获取用户信息怎么调用 #152

Closed beimusky closed 1 year ago

beimusky commented 1 year ago

接口: https://opendocs.alipay.com/open/02xtla

使用模式3.0: dc_alipay.server_api( "alipay.system.oauth.token", biz_content={ "grant_type": "authorization_code", "code": '85792b3286284f05b985f8dbb510AX82', } )

提示: alipay.exceptions.AliPayValidationError

beimusky commented 1 year ago

res = dc_alipay.server_api( "alipay.system.oauth.token", grant_type="authorization_code", code="85792b3286284f05b985f8dbb510AX82" ) print(res) 这种关键字传参,也报错

fzlee commented 1 year ago

你是在什么场景下需要调用这个接口? 这个需要使用到ISVAlipay。

如果你现在的开发任务需要使用到这种程度,我建议你看一下这个库的源代码

主要是看一看对数据进行封装的逻辑,不需要看加解密那一部分。

不然后面的开发会很吃力

beimusky commented 1 year ago

使用场景,转账到用户支付宝账户 其中可以使用姓名校验方式和用户user_id方式。 经过实际场景发现,让用户自主填写姓名和账号,容错率太低,多个空格或者多个数字都会失败。导致后期处理异常和重复打款以及沟通用户修改账户成本极高。所以需要通过授权方式,直接拿到user_id ,基本不会出错。 源码我看到611行, raw_string = urlopen(url, timeout=self._config.timeout).read().decode() 是这里解析不成功,实际此时支付宝已经返回正常的数据了。 经过测试 我切换到client_api,直接post拼接的地址,业务没问题。一切正常。 但是,这个业务理论上应该是用server_api的

fzlee commented 1 year ago

请使用isvalipay

beimusky commented 1 year ago

https://github.com/fzlee/alipay/blob/master/docs/apis_new.zh-hans.md 能否补充下isvalipay使用示例

yixjue commented 1 year ago

@fzlee 我也遇到了类似的问题,我跟 @beimusky 的需求一样,使用模式3.0,并且改用 isvalipay 后也是同样的报错。以下是我的代码及报错提示。

`alipay_obj.server_api('alipay.system.oauth.token', biz_content={'grant_type': 'authorization_code', 'code': 'xxx'})

Traceback (most recent call last): File "", line 1, in File "/xxx/lib/python3.9/site-packages/alipay/init.py", line 229, in server_api return self.verified_sync_response(data, response_type) File "/xxx/lib/python3.9/site-packages/alipay/init.py", line 613, in verified_sync_response return self._verify_and_return_sync_response(raw_string, response_type) File "/xxx/lib/python3.9/site-packages/alipay/init.py", line 595, in _verify_and_return_sync_response result = response[response_type] KeyError: 'alipay_system_oauth_token_response'`

yixjue commented 1 year ago

使用场景,转账到用户支付宝账户 其中可以使用姓名校验方式和用户user_id方式。 经过实际场景发现,让用户自主填写姓名和账号,容错率太低,多个空格或者多个数字都会失败。导致后期处理异常和重复打款以及沟通用户修改账户成本极高。所以需要通过授权方式,直接拿到user_id ,基本不会出错。 源码我看到611行, raw_string = urlopen(url, timeout=self._config.timeout).read().decode() 是这里解析不成功,实际此时支付宝已经返回正常的数据了。 经过测试 我切换到client_api,直接post拼接的地址,业务没问题。一切正常。 但是,这个业务理论上应该是用server_api的

@beimusky 你好,“切换到client_api,直接post拼接的地址”请问这个代码是怎么编写的

beimusky commented 1 year ago

https://github.com/fzlee/alipay/blob/master/docs/apis.zh-hans.md 使用这种原始的方式,自己拼接请求

url = 'https://openapi.alipay.com/gateway.do?' + dc_alipay.client_api("alipay.user.info.share", **data) res = requests.post(url).json().get('alipay_user_info_share_response')

yixjue commented 1 year ago

https://github.com/fzlee/alipay/blob/master/docs/apis.zh-hans.md 使用这种原始的方式,自己拼接请求

url = 'https://openapi.alipay.com/gateway.do?' + dc_alipay.client_api("alipay.user.info.share", **data) res = requests.post(url).json().get('alipay_user_info_share_response')

谢谢,这种方式没问题