ASP.NET Core环境下无.NET SDK时创建PayPal产品及订阅的方案咨询
ASP.NET Core 集成 PayPal 订阅无SDK实现方案
即便没有对应 .net 官方SDK,你可以直接通过HTTP请求调用PayPal公开的REST API完成产品、计划创建及完整订阅流程,具体实现路径如下:
1. 前期准备
- 先在PayPal开发者后台获取客户端ID(Client ID)和客户端密钥(Client Secret),优先用沙箱环境调试,上线后再切换为生产环境凭证
- 所有业务接口请求都需要先获取访问令牌(Access Token):调用PayPal OAuth2令牌接口,请求头用Basic认证,将
客户端ID:客户端密钥做Base64编码传入,请求体固定传grant_type=client_credentials,返回的access_token即为后续所有接口的授权凭证,有效期约2小时,可缓存复用减少重复请求
2. 第一步:创建产品
调用PayPal产品创建接口,请求头携带Authorization: Bearer 你获取的access_token和Content-Type: application/json,核心请求参数示例:
{ "name": "你的订阅产品名称", "description": "产品功能描述", "type": "SERVICE", "category": "SOFTWARE", "home_url": "你的产品官方页面地址" }
接口调用成功后返回的id字段为产品ID,创建订阅计划时需要用到该值。
3. 第二步:创建订阅计划
调用PayPal订阅计划创建接口,同样携带授权头,核心请求参数示例:
{ "product_id": "上一步获取的产品ID", "name": "订阅计划名称,例如月度高级会员", "description": "计划权益描述", "status": "ACTIVE", "billing_cycles": [ { "frequency": { "interval_unit": "MONTH", "interval_count": 1 }, "tenure_type": "REGULAR", "sequence": 1, "total_cycles": 0, "pricing_scheme": { "fixed_price": { "value": "9.99", "currency_code": "USD" } } } ], "payment_preferences": { "auto_bill_outstanding": true, "setup_fee_failure_action": "CANCEL", "payment_failure_threshold": 3 } }
参数说明:
interval_unit可选值有DAY/WEEK/MONTH/YEAR,对应按天/周/月/年结算interval_count代表每多少个周期结算一次,填1就是每个周期都结算total_cycles填0代表订阅自动续期,填固定数字代表达到对应结算次数后自动到期payment_failure_threshold代表连续多少次扣款失败后自动取消订阅
调用成功后返回的id为订阅计划ID,后续引导用户开通订阅时使用该值即可。
4. ASP.NET Core 代码实现示例
你可以直接用框架自带的HttpClient发起请求,无需引入额外第三方包,简单封装参考:
// Program.cs 中注册PayPal专用HttpClient builder.Services.AddHttpClient("PayPal", client => { // 沙箱环境填入对应基地址,生产环境替换为生产环境基地址 client.BaseAddress = new Uri("PayPal API对应环境的基地址"); }); // 获取AccessToken的封装方法 public async Task<string> GetPayPalAccessTokenAsync(HttpClient httpClient, string clientId, string clientSecret) { var authBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{clientId}:{clientSecret}")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authBase64); var requestContent = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "client_credentials") }); var response = await httpClient.PostAsync("v1/oauth2/token", requestContent); response.EnsureSuccessStatusCode(); var tokenResult = await response.Content.ReadFromJsonAsync<PayPalTokenResult>(); return tokenResult.AccessToken; } // AccessToken响应映射类 public class PayPalTokenResult { [JsonPropertyName("access_token")] public string AccessToken { get; set; } [JsonPropertyName("expires_in")] public int ExpiresIn { get; set; } }
后续创建产品、创建计划的请求都可以按照同样的逻辑,将获取到的access_token放到Bearer授权头中,向对应接口POST JSON参数即可完成调用。
内容的提问来源于stack exchange,提问作者user12484971
相关产品推荐
相关产品推荐

