Asp.net mvc 具有520003权限的链接付款身份验证失败

Asp.net mvc 具有520003权限的链接付款身份验证失败,asp.net-mvc,paypal,Asp.net Mvc,Paypal,在获得用户许可后,我无法执行链接支付。我在获取访问令牌和访问令牌机密方面没有问题 代码应该是这样工作的:用户(个人类型的沙盒帐户)授权主要接收者(业务类型的沙盒帐户)从他的帐户中取钱。 主接收机向第二接收机发送一部分和 代码是用ASP.NET MVC编写的,但我想它与框架无关,我使用的是PayPalAdaptivePaymentsSDK和PayPerpermissionSsdk 我想在沙盒环境中使用它进行测试 我假设它与应用程序id有关,我将非常感谢您的逐步解释 以下是我获取所有凭证的方式: 我

在获得用户许可后,我无法执行链接支付。我在获取访问令牌和访问令牌机密方面没有问题

代码应该是这样工作的:用户(个人类型的沙盒帐户)授权主要接收者(业务类型的沙盒帐户)从他的帐户中取钱。 主接收机向第二接收机发送一部分和

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

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

我假设它与应用程序id有关,我将非常感谢您的逐步解释

以下是我获取所有凭证的方式: 我登录到我的开发者帐户。
account1.Username,account1.Password,account1.Signature
-沙箱->账户->我选择支付的主要接收方(业务类型账户)->API凭证
应用程序ID-“APP-80W284485P519543T” 在配置文件中,我将模式指定为“沙盒”

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

然后我想执行以下代码,在payResponse中,我得到错误ID 520003“身份验证失败。API凭据不正确。”

公共类许可控制器:控制器
{
私人自适应支付服务(U自适应支付服务);
公共行动结果索引()
{
ViewBag.AccessToken=PayPalConfig.AccessToken;
ViewBag.AccessTokenSecret=PayPalConfig.AccessTokenSecret;
返回视图();
}
公共许可证控制员()
{
_adaptivePaymentService=新的AdaptivePaymentsService(PayPalConfig.GetConfig());
}
公共操作结果GetPermission()
{
RequestPermissionsRequest rp=新的RequestPermissionsRequest();
rp.scope=新列表();
rp.scope.添加(“快速检验”);
Dictionary config=PayPalConfig.GetConfig();
rp.callback=”http://localhost:42072/Permission/GetAccessToken";
rp.requestEnvelope=新的PayPal.Permissions.Model.requestEnvelope(“en_US”);
RequestPermissionsResponse rpr=null;
许可服务=新许可服务(配置);
rpr=服务请求权限(rp);
字符串confirmPermissions=”https://www.sandbox.paypal.com/webscr&cmd=_grant-许可和请求_令牌=“+rpr.token;
返回重定向(确认权限);
}
公共操作结果GetAccessToken()
{
Uri=Request.Url;
Dictionary config=PayPalConfig.GetConfig();
var gat=new GetAccessTokenRequest();
gat.token=HttpUtility.ParseQueryString(uri.Query).Get(“请求令牌”);
gat.verifier=HttpUtility.ParseQueryString(uri.Query).Get(“验证码”);
gat.requestEnvelope=新的PayPal.Permissions.Model.requestEnvelope(“en_US”);
GetAccessTokenResponse gats=null;
var服务=新权限服务(配置);
gats=service.GetAccessToken(gat);
_adaptivePaymentService.SetAccessToken(gats.token);
_adaptivePaymentService.SetAccessTokenSecret(gats.tokenSecret);
PayPalConfig.AccessToken=\u adaptivePaymentService.getAccessToken();
PayPalConfig.AccessTokenSecret=_adaptivePaymentService.getAccessTokenSecret();
返回操作(“索引”);
}
公共行动结果链支付()
{
ReceiverList ReceiverList=新的ReceiverList();
receiverList.receiver=新列表();
接收器二次接收器=新接收器(1.00M);
secondary receiver.email=“mizerykordia6662-facilitator@gmail.com";
接收者列表。接收者。添加(第二接收者);
接收机主接收机=新接收机(5.00M);
primaryReceiver.email=”mizTestMerchant@test.com";
primaryReceiver.primary=true;
接收方列表。接收方。添加(主要接收方);
PayPal.AdaptivePayments.Model.RequestEnvelope RequestEnvelope=新PayPal.AdaptivePayments.Model.RequestEnvelope(“en_US”);
字符串actionType=“支付”;
字符串returnUrl=”http://localhost:42072/Home/Index";
字符串取消URL=”https://devtools-paypal.com/guide/ap_chained_payment/dotnet?cancel=true";
字符串currencyCode=“USD”;
_adaptivePaymentService.SetAccessToken(PayPalConfig.AccessToken);
_adaptivePaymentService.SetAccessTokenSecret(PayPalConfig.AccessTokenSecret);
PayRequest PayRequest=新的PayRequest(requestEnvelope,actionType,
cancelUrl、currencyCode、receiverList、returnUrl);
//这里断了
PayResponse PayResponse=\u adaptivePaymentService.Pay(payRequest);
PaymentDetailsRequest PaymentDetailsRequest=新的PaymentDetailsRequest(新的PayPal.AdaptivePayments.Model.RequestEnvelope(“en-US”);
paymentDetailsRequest.payKey=payResponse.payKey;
SetPaymentOptions请求paymentOptions=新建SetPaymentOptions请求()
{payKey=payResponse.payKey};
_adaptivePaymentService.SetPaymentOptions(paymentOptions);
PaymentDetails响应PaymentDetails响应=\u adaptivePaymentService.PaymentDetails(paymentDetailsRequest);
ExecutePaymentRequestExec=新的ExecutePaymentRequest(新的PayPal.AdaptivePayments.Model.RequestEnvelope(“en-US”)、paymentDetailsRequest.payKey);
ExecutePaymentResponse响应=_adaptivePaymentService.ExecutePayment(exec);
返回操作(“索引”);
}
}
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");
    }
}