我花了将近一天时间试图解决这个问题,并希望得到任何提示或指导让这个该死的东西起作用! 我的SetExpressCheckOut和GetExpressCheckOut函数正常工作,但我从PayPal获取对象..
但最后一步DoExpressCheckOut失败并显示以下错误消息:“您没有权限进行此API调用”因此它无法成为我的凭据,因为我在执行Set和Get调用时使用了相同的内容。
我有标准的PayPal帐户(不是专业版) 我正在使用实时终点:https://api-3t.paypal.com/2.0/ 并通过API用户名/密码/签名
连接我到处寻找是否有特定的API权限可以在PayPal上配置,但我没有运气......
这是代码。我很感激帮助......
public bool DoExpressCheckout(string token)
{
var getDetailsResponse = new GetExpressCheckoutDetailsResponseType();
var getDetailsRequestType = new GetExpressCheckoutDetailsRequestType();
var getDetailsReq = new GetExpressCheckoutDetailsReq();
getDetailsRequestType.Version = GetVersionOrDefault();
getDetailsRequestType.Token = token;
getDetailsReq.GetExpressCheckoutDetailsRequest = getDetailsRequestType;
var requestType = new DoExpressCheckoutPaymentRequestType();
requestType.Version = GetVersionOrDefault(); // 109
try
{
var type2 = new CustomSecurityHeaderType
{
Credentials = new UserIdPasswordType()
{
Username = ConfigurationManager.AppSettings["PAYPAL_API_USERNAME"],
Password = ConfigurationManager.AppSettings["PAYPAL_API_PASSWORD"],
Signature = ConfigurationManager.AppSettings["PAYPAL_API_SIGNATURE"],
}
};
var paypalAAInt = new PayPalAPIAAInterfaceClient();
getDetailsResponse = paypalAAInt.GetExpressCheckoutDetails(ref type2, getDetailsReq);
if (getDetailsResponse.Errors != null && getDetailsResponse.Errors.Length > 0)
{
throw new Exception("Exception(s) occured when calling PayPal. First exception: " +
getDetailsResponse.Errors[0].LongMessage + getDetailsResponse.Errors.Length.ToString());
}
if (getDetailsResponse.Ack == AckCodeType.Success)
{
var payReq = new DoExpressCheckoutPaymentReq()
{
DoExpressCheckoutPaymentRequest = new DoExpressCheckoutPaymentRequestType()
{
Version = GetVersionOrDefault(), //109
DoExpressCheckoutPaymentRequestDetails = new DoExpressCheckoutPaymentRequestDetailsType()
{
Token = getDetailsResponse.GetExpressCheckoutDetailsResponseDetails.Token,
PaymentAction = PaymentActionCodeType.Sale,
PaymentActionSpecified = true,
PayerID = getDetailsResponse.GetExpressCheckoutDetailsResponseDetails.PayerInfo.PayerID,
PaymentDetails = new PaymentDetailsType[] {
new PaymentDetailsType()
{
OrderTotal = getDetailsResponse.GetExpressCheckoutDetailsResponseDetails.PaymentDetails[0].OrderTotal
}
}
}
}
};
var resp = paypalAAInt.DoExpressCheckoutPayment(ref type2, payReq);
if (resp.Errors != null && resp.Errors.Length > 0)
{
// ######### IT DIES HERE ################3
throw new Exception("Exception(s) occured when calling PayPal. First exception: " +
resp.Errors[0].LongMessage + resp.Errors.Length.ToString());
}
if (resp.Ack == AckCodeType.Success)
return true;
}
else
return false;
return false;
}
catch (Exception ex)
{
Logger.LogError(ex, null, null, "Problem in PayPal DoExpressCheckOut function");
throw new Exception("There was a problem processing your request. You have not been charged!");
}
}
答案 0 :(得分:1)
我知道它必须是愚蠢的东西!这是答案
CustomSecurityHeaderType ..我正在重复使用GetDetails和DoExpressCheckout调用。用户/通行证/签名信息在第一次通话时清除,当发送到paypalAAInt.DoExpressCheckoutPayment时它是空的。好悲伤。