Django 支付宝三方登陆

53 阅读1分钟

支付宝三方登录

pip3 install alipay-sdk-python 
  • 所需导入模块
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.request.AlipayOpenAuthTokenAppRequest import AlipayOpenAuthTokenAppRequest,AlipayOpenAuthTokenAppModel
  • 过程中可能会由于ssl证书校验而出错
import ssl
 
ssl._create_default_https_context = ssl._create_unverified_context
  • 使用sdk生成支付宝客户端
def get_alipay_client():
    alipay_client_config = AlipayClientConfig()
    alipay_client_config.app_id = 
    alipay_client_config.app_private_key = ""
    alipay_client_config.alipay_public_key = ""
    # 使用授权码换取令牌
    alipay_client = DefaultAlipayClient(alipay_client_config)
    return alipay_client
  • 生成链接及回调信息获取
class ZFB(APIView):
    def get(self,request):
        # 返回支付宝登录页面
        app_id = 
        redirect_uri = 'http://localhost:8080/result/'
        url = 'https://openauth.alipaydev.com/oauth2/appToAppAuth.htm?app_id=%s&redirect_uri=%s'

        return Response({
            "url":url % (app_id,redirect_uri)
        }) 

    def post(self,request):
        auth_code = request.data.get('app_auth_code')
        print(auth_code)
        zfb_client = get_alipay_client()
        biz_model = AlipayOpenAuthTokenAppModel()
        biz_model.grant_type = "authorization_code"
        biz_model.code = auth_code
        request = AlipayOpenAuthTokenAppRequest(biz_model=biz_model)
        response_content = zfb_client.execute(request)
        # 可以通过此处返回的response_content中的user_id进行用户三方登录的定位
        print(response_content)
        return Response({
            'data':response_content,
        })