2013-06-16 2 views
1

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; 
     } 

은 알려 주시기 바랍니다 :

여기에 코드입니다! 감사합니다. .

답변

1

전화 번호 필드를 제거하면 응답이 성공적으로 반환됩니다. Delayed Chained Payment 트랜잭션에서 전화 번호 필드를 사용할 수 없으면 확실하지 않습니다. Adaptive Payments의 제품 팀에 연락하여 알아봐야 할 것입니다.

편집 : 전화 번호는 확인 된 모바일 번호 여야합니다. 전화 번호 필드를 사용하여 수신기를 정의 할 수도 있으므로 실제로 수신기를 두 번 정의하려고 시도하기 때문에 오류가 발생합니다.

내가 (당신과 같은 있지만, 샌드 박스 세트를 전자 메일 주소가) 테스트 요청 -

requestEnvelope.errorLanguage=en_US 
actionType=PAY_PRIMARY 
cancelUrl=http://localhost/ccc/ProgramsandServices/CommunityFundingInitiative/OopsSomethingWentWrong!.aspx 
currencyCode=USD 
feesPayer=EACHRECEIVER 
ipnNotificationUrl=http://localhost/ccc/desktopmodules/UCU_ProjectManagement/PayPalIPN.aspx 
receiverList.receiver(0).amount=10.00 
receiverList.receiver(0)[email protected] 
receiverList.receiver(0).primary=true 
receiverList.receiver(0).invoiceId=51|1|6/16/2013 4:35:56 PM 
receiverList.receiver(0).paymentType=GOODS 
receiverList.receiver(1).amount=9.50 
receiverList.receiver(1)[email protected] 
receiverList.receiver(1).primary=false 
receiverList.receiver(1).invoiceId=51|1|6/16/2013 4:35:56 PM 
receiverList.receiver(1).paymentType=GOODS 
reverseAllParallelPaymentsOnError=false 
[email protected] 
returnUrl=http://localhost/ccc/ProgramsandServices/CommunityFundingInitiative/ThankYouforYourDonation.aspx 
trackingId=51|0|6/16/2013 4:35:56 PM 
+0

이 작동을; 고마워요. –