具有权限的链式付款520003身份验证失败

时间:2016-09-19 11:11:12

标签: asp.net-mvc paypal

我在获得用户许可后执行链式付款有问题。我没有遇到访问令牌和访问令牌秘密的麻烦。

代码应该以这种方式工作:用户(个人类型沙盒帐户)授权主要接收者(业务类型沙盒帐户)从他的帐户中获取资金。 主接收器将部分和数发送给第二个接收器。

代码是用ASP.NET MVC编写的,但我认为它与框架无关,我使用的是PayPalAdaptivePaymentsSDK和PayPalPermissionsSDK

我想在沙箱环境中使用它进行测试。

我认为它与应用程序ID有关,我将非常感谢逐步解释

以下是我获取所有凭据的方法: 我登录了我的开发者帐户。
account1.Username,account1.Password,account1.Signature
- 沙箱 - > 帐户 - >我选择付款的主要接收人(业务类型帐户) - > API凭据
applicationId - " APP-80W284485P519543T" 在配置文件中,我将模式指定为" sandbox"。

我使用相同的配置执行付款。

然后我想执行以下代码并在payResponse中得到errorId 520003"身份验证失败。 API凭据不正确。"

public class PermissionController : Controller
{
    private AdaptivePaymentsService _adaptivePaymentService;

    public ActionResult Index()
    {
        ViewBag.AccessToken = PayPalConfig.AccessToken;
        ViewBag.AccessTokenSecret = PayPalConfig.AccessTokenSecret;
        return View();
    }

    public PermissionController()
    {
        _adaptivePaymentService = new AdaptivePaymentsService(PayPalConfig.GetConfig());
    }

    public ActionResult GetPermission()
    {
        RequestPermissionsRequest rp = new RequestPermissionsRequest();
        rp.scope = new List<string>();
        rp.scope.Add("EXPRESS_CHECKOUT");

        Dictionary<string, string> config = PayPalConfig.GetConfig();

        rp.callback = "http://localhost:42072/Permission/GetAccessToken";

        rp.requestEnvelope = new PayPal.Permissions.Model.RequestEnvelope("en_US");

        RequestPermissionsResponse rpr = null;

        PermissionsService service = new PermissionsService(config);

        rpr = service.RequestPermissions(rp);
        string confirmPermissions = "https://www.sandbox.paypal.com/webscr&cmd=_grant-permission&request_token=" + rpr.token;

        return Redirect(confirmPermissions);
    }

    public ActionResult GetAccessToken()
    {
        Uri uri = Request.Url;
        Dictionary<string, string> config = PayPalConfig.GetConfig();

        var gat = new GetAccessTokenRequest();

        gat.token = HttpUtility.ParseQueryString(uri.Query).Get("request_token");
        gat.verifier = HttpUtility.ParseQueryString(uri.Query).Get("verification_code");

        gat.requestEnvelope = new PayPal.Permissions.Model.RequestEnvelope("en_US");
        GetAccessTokenResponse gats = null;

        var service = new PermissionsService(config);
        gats = service.GetAccessToken(gat);
        _adaptivePaymentService.SetAccessToken(gats.token);
        _adaptivePaymentService.SetAccessTokenSecret(gats.tokenSecret);
        PayPalConfig.AccessToken = _adaptivePaymentService.getAccessToken();
        PayPalConfig.AccessTokenSecret = _adaptivePaymentService.getAccessTokenSecret();
        return RedirectToAction("Index");
    }

    public ActionResult ChainedPayment()
    {
        ReceiverList receiverList = new ReceiverList();

        receiverList.receiver = new List<Receiver>();
        Receiver secondaryReceiver = new Receiver(1.00M);
        secondaryReceiver.email = "mizerykordia6662-facilitator@gmail.com";
        receiverList.receiver.Add(secondaryReceiver);

        Receiver primaryReceiver = new Receiver(5.00M);
        primaryReceiver.email = "mizTestMerchant@test.com";
        primaryReceiver.primary = true;
        receiverList.receiver.Add(primaryReceiver);

        PayPal.AdaptivePayments.Model.RequestEnvelope requestEnvelope = new PayPal.AdaptivePayments.Model.RequestEnvelope("en_US");
        string actionType = "PAY";
        string returnUrl = "http://localhost:42072/Home/Index";
        string cancelUrl = "https://devtools-paypal.com/guide/ap_chained_payment/dotnet?cancel=true";
        string currencyCode = "USD";

        _adaptivePaymentService.SetAccessToken(PayPalConfig.AccessToken);
        _adaptivePaymentService.SetAccessTokenSecret(PayPalConfig.AccessTokenSecret);

        PayRequest payRequest = new PayRequest(requestEnvelope, actionType, 
            cancelUrl, currencyCode, receiverList, returnUrl);

        // it breaks here
        PayResponse payResponse = _adaptivePaymentService.Pay(payRequest);

        PaymentDetailsRequest paymentDetailsRequest = new PaymentDetailsRequest(new PayPal.AdaptivePayments.Model.RequestEnvelope("en-US"));
        paymentDetailsRequest.payKey = payResponse.payKey;

        SetPaymentOptionsRequest paymentOptions = new SetPaymentOptionsRequest()
            { payKey = payResponse.payKey };

        _adaptivePaymentService.SetPaymentOptions(paymentOptions);

        PaymentDetailsResponse paymentDetailsRespons = _adaptivePaymentService.PaymentDetails(paymentDetailsRequest);

        ExecutePaymentRequest exec = new ExecutePaymentRequest(new PayPal.AdaptivePayments.Model.RequestEnvelope("en-US"), paymentDetailsRequest.payKey);
        ExecutePaymentResponse response = _adaptivePaymentService.ExecutePayment(exec);
        return RedirectToAction("Index");
    }
}

0 个答案:

没有答案