【问题标题】:Paypal REST API SDK - Activating a billing plan in C#Paypal REST API SDK - 在 C# 中激活计费计划
【发布时间】:2015-09-09 19:43:31
【问题描述】:

我有以下代码来创建计费计划

 string iClientID = "xxxxxx";
        string iSecret = "yyyyyy";

        Dictionary<string, string> sdkConfig = new Dictionary<string, string>();
        sdkConfig.Add("mode", "sandbox");
        string accessToken = new OAuthTokenCredential(iClientID, iSecret, sdkConfig).GetAccessToken();
    APIContext apiContext = new APIContext(accessToken);
    apiContext.Config = sdkConfig;

    Plan xPlan = new Plan();
    xPlan.name = "Billing Plan OneA";
    xPlan.description = "Our first billing plan for testing";
    xPlan.type = "INFINITE";

    PaymentDefinition xPDef = new PaymentDefinition();
    xPDef.name = "Payment Def One";
    xPDef.type = "REGULAR";
    xPDef.frequency_interval = "1";
    xPDef.frequency = "MONTH";
    xPDef.cycles = "0";

    MerchantPreferences xPrefs = new MerchantPreferences();
    xPrefs.cancel_url = "http://learnoogle.com";
    xPrefs.return_url = "http://learnoogle.com?success";


    Currency xPCUrr = new Currency();
    xPCUrr.currency = "USD";
    xPCUrr.value = "25.00";

    xPDef.amount = xPCUrr;

    List<PaymentDefinition> xDeffs = new List<PaymentDefinition>();
    xDeffs.Add(xPDef);

    xPlan.payment_definitions = xDeffs;
    xPlan.merchant_preferences = xPrefs;
        Plan cPLan = xPlan.Create(apiContext);

我尝试使用以下代码将计划设置为活动

    Patch xPatch = new Patch();
    xPatch.op = "replace";
    xPatch.path = "state";
    xPatch.value = "ACTIVE";

    PatchRequest yPatch = new PatchRequest();
    yPatch.Add(xPatch);

    cPLan.Update(apiContext, yPatch);

但是,这给了我一个 (400) 错误请求。 {"name":"BUSINESS_VALIDATION_ERROR","details":[{"field":"validation_error","issue":"提供的路径无效。"}],"message":"验证错误。","information_link": "https://developer.paypal.com/webapps/developer/docs/api/#BUSINESS_VALIDATION_ERROR","debug_id":"01f0eb9aaaea0"}

谁能告诉我我在这方面做错了什么/

【问题讨论】:

    标签: c# paypal paypal-sandbox paypal-subscriptions


    【解决方案1】:

    更新计划时,您需要将Patch.value 属性设置为包含您要替换的字段的新Plan 对象(在这种情况下将state 设置为ACTIVE)。此外,您需要将 Patch.path 属性设置为 "/"

    在您的代码中,执行以下操作:

    Patch xPatch = new Patch();
    xPatch.op = "replace";
    xPatch.path = "/";
    xPatch.value = new Plan() { state = "ACTIVE" };
    
    PatchRequest yPatch = new PatchRequest();
    yPatch.Add(xPatch);
    
    cPLan.Update(apiContext, yPatch);
    

    【讨论】:

    • 谢谢 - 贝宝开发文档没有说得很清楚 - 我发现我可以用 Newtonsoft 将 json 字符串解析为 json 对象并做同样的事情。
    【解决方案2】:

    自提交批准的答案以来,代码似乎已更改。现在应该是这样的:

    var client = new PayPalHttpClient(environment);
    JsonPatch<Plan> xPatch = new JsonPatch<Plan>();
    xPatch.op = "replace";
    xPatch.path = "/";
    xPatch.value = new Plan() { state = "ACTIVE" };
    
    PlanUpdateRequest<Plan> yPatch = new PlanUpdateRequest<Plan>(planId);
    yPatch.RequestBody(new List<JsonPatch<Plan>>() { patch });
    
    BraintreeHttp.HttpResponse response = client.Execute(yPatch).Result; // or await this
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2014-12-15
      • 2017-06-21
      • 2023-03-23
      • 2015-01-27
      • 2019-03-11
      • 2020-04-13
      相关资源
      最近更新 更多