C#에서 PayPal의 Adaptive Payments API를 통해 지연 연쇄 지불을 시도하고 있습니다. 내가 얻는 오류가 이해가되지 않고 .NET에서 문제를 해결하기 위해 아무것도 찾을 수 없습니다.둘 이상의 필드를 사용하여 수신자를 지정할 수 없습니다.
오류 메시지는 다음과 같습니다 잘못된 요청 : 하나 개 이상의 필드는 내가 요청을 보낸다있어 수신기 여기
을 지정하는 데 사용할 수 없습니다 : 나는 두 개의 수신기를 지정
requestEnvelope.errorLanguage=en_US
&actionType=PAY_PRIMARY
&cancelUrl=http%3a%2f%2flocalhost%2fccc%2fProgramsandServices%2fCommunityFundingInitiative%2fOopsSome thingWentWrong!.aspx ¤cyCode=USD
&feesPayer=EACHRECEIVER
&ipnNotificationUrl=http%3a%2f%2flocalhost%2fccc%2fdesktopmodules%2fUCU_ProjectManagement%2fPayPalIPN.aspx
&receiverList.receiver(0).amount=10.00
&receiverList.receiver(0).email=A_VALID_SANDBOX_EMAIL_ACCOUNT_ADDRESS_FOR_BUSINESS_OWNER
&receiverList.receiver(0).phone.countryCode=001
&receiverList.receiver(0).phone.phoneNumber=VALID_PHONE_NUMBER
&receiverList.receiver(0).primary=true
&receiverList.receiver(0).invoiceId=51%7c1%7c6%2f16%2f2013+4%3a35%3a56+PM
&receiverList.receiver(0).paymentType=GOODS
&receiverList.receiver(1).amount=9.5000
&receiverList.receiver(1).email=A_VALID_SANDBOX_EMAIL_ACCOUNT_ADDRESS
&receiverList.receiver(1).phone.countryCode=001
&receiverList.receiver(1).phone.phoneNumber=VALID_PHONE_NUMBER
&receiverList.receiver(1).primary=false
&receiverList.receiver(1).invoiceId=51%7c1%7c6%2f16%2f2013+4%3a35%3a56+PM
&receiverList.receiver(1).paymentType=GOODS
&reverseAllParallelPaymentsOnError=false
&senderEmail=A_VALID_SANDBOX_PERSONAL_EMAIL_ACCOUNT
&returnUrl=http%3a%2f%2flocalhost%2fccc%2fProgramsandServices%2fCommunityFundingInitiative%2fThankYouforYourDonation.aspx
&trackingId=51%7c0%7c6%2f16%2f2013+4%3a35%3a56+PM&
, 하나는 초등, 다른 하나는 그렇지 않습니다.
내가 무엇이 누락 되었습니까? 조치 유형으로 PAY 및 PAY_PRIMARY를 모두 시도했습니다. 어느 쪽이든 같은 결과가 나타납니다. 하나의 수신기 만 사용하는 경우 작동합니다.
WebClient webClient = new WebClient();
// Receivers
ReceiverList receiverList = new ReceiverList();
// Primary Receiver
Receiver receiver = new Receiver();
receiver.accountId = null;
receiver.amount = Convert.ToDecimal(txtPledgeAmount.Text.Trim());
receiver.invoiceId = Convert.ToString(SelectedProjectId) + "|" + Convert.ToString(PortalSettings.AdministratorId) + "|" + Convert.ToString(DateTime.Now.ToUniversalTime());
//receiver.paymentSubType = null;
receiver.paymentType = "GOODS";
receiver.primary = true;
if (!String.IsNullOrEmpty(PRIMARY_RECEIVER_PHONE_NUMBER))
{
receiver.phone = new PhoneNumberType();new PhoneNumberType("001",PRIMARY_RECEIVER_PHONE_NUMBER);
}
if (!String.IsNullOrEmpty(PRIMARY_RECEIVER_EMAIL_ADDRESS))
{
receiver.email = PRIMARY_RECEIVER_EMAIL_ADDRESS;
}
receiverList.receiver.Add(receiver);
// Secondary Receiver
string receiverEmail = "";
string receiverPhone = VALID_PHONE_NUMBER;
String receiverUserName = MembershipServices.Business.SharedFunctions.GetUserNameEmail(PortalId, SelectedProject.ProjectOwnerID, MembershipServices.SharedEnums.DisplayNameFormat_Type.FullName, ref receiverEmail);
Receiver receiver2 = new Receiver(Decimal.Parse(this.txtPledgeAmount.Text.Trim()) * SECONDARY_RECEIVER_PERCENTAGE);
if (!String.IsNullOrEmpty(receiverPhone))
{
receiver2.phone = receiver.phone = new PhoneNumberType("001", receiverPhone);
}
if (!String.IsNullOrEmpty(receiverEmail))
{
receiver2.email = receiverEmail;
}
receiver2.primary = Boolean.Parse("false");
receiver2.invoiceId = Convert.ToString(SelectedProjectId) + "|" + Convert.ToString(SelectedProject.ProjectOwnerID) + "|" + Convert.ToString(DateTime.Now.ToUniversalTime()); ;
receiver2.paymentType = "GOODS";
receiverList.receiver.Add(receiver2);
String PortalAlias = PortalSettings.PortalAlias.HTTPAlias;
if (!PortalAlias.EndsWith("/"))
{
PortalAlias = PortalAlias + "/";
}
if (Request.IsSecureConnection)
{
PortalAlias = @"https://" + PortalAlias;
}
else
{
PortalAlias = @"http://" + PortalAlias;
}
string actionType = "PAY_PRIMARY";
PayRequest req = new PayRequest(new RequestEnvelope("en_US"), actionType,
PortalAlias + CANCEL_URL, SharedEnums.CurrencyCode_Type.USD.ToString(),
receiverList, PortalAlias + RETURN_URL);
req.ipnNotificationUrl = PortalAlias + IPN_NOTIFICATION_URL;
//(Optional) A note associated with the payment (text, not HTML).
// Maximum length: 1000 characters, including newline characters
if (!String.IsNullOrEmpty(txtPledgeMessage.Text.Trim()))
{
req.memo = txtPledgeMessage.Text.Trim();
}
else
{
req.memo = null;
}
// set optional parameters
//(Optional) Whether to reverse parallel payments if an error occurs with a payment.
//Allowable values are:
//true – Each parallel payment is reversed if an error occurs
//false – Only incomplete payments are reversed (default)
req.reverseAllParallelPaymentsOnError = false;
req.feesPayer = "EACHRECEIVER";
// Sender's email address
=req.senderEmail = SENDER_EMAIL_ADDRESS;
//(Optional) A unique ID that you specify to track the payment.
//Note: You are responsible for ensuring that the ID is unique.
//Maximum length: 127 characters
string trackingId = Convert.ToString(SelectedProjectId + "|" + Convert.ToString(SelectedUserId) + "|" + Convert.ToString(DateTime.Now.ToUniversalTime()));
req.trackingId = trackingId;
// All set. Fire the request
AdaptivePaymentsService service = new AdaptivePaymentsService();
PayResponse resp = null;
try
{
resp = service.Pay(req);
}
catch (System.Exception e)
{
Response.Write(e.Message);
return;
}
은 알려 주시기 바랍니다 :
여기에 코드입니다! 감사합니다. .
이 작동을; 고마워요. –