You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Identity API实现PayPal登录的流程及技术疑问

基于ASP.NET MVC集成Log in with PayPal的实现方案

一、Log in with PayPal整体运作机制

Log in with PayPal基于OAuth2.0授权框架,核心逻辑是通过PayPal授权服务器获取用户授权,进而拿到访问令牌调用PayPal的用户信息API,后续还可依托令牌发起自动付款操作。对应你的业务流程,OAuth流程拆解如下:

  1. 前端展示PayPal登录按钮,用户点击后跳转至PayPal官方授权页
  2. 用户完成PayPal账户登录并授权你的应用获取其账户信息后,PayPal自动跳转回你指定的回调地址,同时携带授权码
  3. 后端用授权码向PayPal换取访问令牌
  4. 凭借访问令牌调用PayPal用户信息接口,获取账户验证状态、邮箱等核心数据
  5. 任务批准后,利用访问令牌(或刷新令牌)调用PayPal付款API完成自动打款

二、技术疑问解答

1. return_url是什么?如何返回授权码?示例URL?

  • return_url是你在PayPal开发者平台提前配置的回调地址,用户在PayPal授权页完成操作后,PayPal会自动跳转至此地址,并通过URL查询参数传递授权码。
  • 授权码通过URL参数code传递,同时还会返回你发起授权时传入的state参数(用于防止CSRF攻击)。
  • 示例URL(假设你的ASP.NET MVC回调路由为/PayPal/AuthorizeCallback):
    https://yourdomain.com/PayPal/AuthorizeCallback?code=EBJ923123ABC...&scope=openid%20email&state=random_csrf_12345
    

2. 如何获取授权码?

授权码由PayPal在用户授权完成后通过return_url返回,具体实现步骤:

  • 前端渲染PayPal登录按钮时,需指定你的PayPalclient-id,并配置redirect_uri(即return_url),同时生成一个随机state参数传入(需在后端存储,用于回调时校验)。
  • 用户完成授权跳转回你的return_url后,在对应的MVC Action中通过Request.QueryString["code"]即可获取授权码。
  • 示例ASP.NET MVC Action代码:
    public ActionResult AuthorizeCallback()
    {
        string authorizationCode = Request.QueryString["code"];
        string state = Request.QueryString["state"];
        // 校验state与之前存储的随机字符串一致,防止CSRF攻击
        // 后续用authorizationCode换取access token
        return View();
    }
    

3. 如何获取用户信息?

获取用户信息需先通过授权码换取访问令牌,再调用PayPal用户信息API,步骤如下:

  • 第一步:向PayPal令牌端点POST请求,参数包含grant_type=authorization_code、code=授权码、redirect_uri=你的return_url,请求头需传入Base64编码的client_id:client_secret(从PayPal开发者平台获取)。
  • 第二步:拿到返回的access_token后,调用PayPal用户信息接口,请求头携带Authorization: Bearer {access_token}。
  • 示例ASP.NET MVC后端代码(简化版):
    public async Task<ActionResult> GetPayPalUserInfo(string authCode)
    {
        // 1. 获取访问令牌
        var client = new HttpClient();
        var authString = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{YourClientId}:{YourClientSecret}"));
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authString);
    
        var tokenParams = new FormUrlEncodedContent(new Dictionary<string, string>
        {
            {"grant_type", "authorization_code"},
            {"code", authCode},
            {"redirect_uri", "https://yourdomain.com/PayPal/AuthorizeCallback"}
        });
    
        var tokenResponse = await client.PostAsync("https://api-m.sandbox.paypal.com/v1/oauth2/token", tokenParams);
        var tokenData = await tokenResponse.Content.ReadFromJsonAsync<PayPalTokenResponse>();
        string accessToken = tokenData.access_token;
    
        // 2. 获取用户信息
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var userInfoResponse = await client.GetAsync("https://api-m.sandbox.paypal.com/v1/identity/oauth2/userinfo?schema=openid");
        var userInfo = await userInfoResponse.Content.ReadFromJsonAsync<PayPalUserInfo>();
    
        // userInfo包含邮箱、账户验证状态等核心数据
        return Json(userInfo, JsonRequestBehavior.AllowGet);
    }
    
    // 辅助模型类
    public class PayPalTokenResponse
    {
        public string access_token { get; set; }
        public string token_type { get; set; }
        public int expires_in { get; set; }
        public string refresh_token { get; set; }
    }
    
    public class PayPalUserInfo
    {
        public string email { get; set; }
        public bool verified { get; set; }
        // 按需添加name、payer_id等其他字段
    }
    

三、业务流程落地要点

  1. 自由职业者绑定PayPal账户:在个人资料页面触发Log in with PayPal授权流程,授权成功后将PayPal用户ID、邮箱、验证状态等数据存储到用户表中,完成账户绑定。
  2. 自动付款实现:任务发布者批准任务后,后端调用PayPal付款API(如Payouts API),传入自由职业者的PayPal邮箱或payer_id,使用访问令牌(或刷新令牌重新获取的令牌)完成请求认证,实现自动打款。

内容的提问来源于stack exchange,提问作者Moiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:30:30