2016-08-02 8 views
6

मैं लेनदेन विवरण पेपैल के एसओएपी एपीआई से प्राप्त करने की कोशिश कर रहा हूं लेकिन मैं पेपैल से त्रुटि में भाग रहा हूं।पेपैल एसओएपी एपीआई (उम्मीद है कि कस्टम फ़ील्ड भी) से लेनदेन विवरण प्राप्त करना

The transaction id is not valid 

मैं जानता हूँ कि यह एक वैध लेनदेन आईडी है, क्योंकि मुझे लगता है मैं पेपैल NVP एपीआई का उपयोग कर लेन-देन विवरण प्राप्त करने में सक्षम हूं लेकिन शायद मैं सोप अनुरोध प्रारूप गलत है: यह त्रुटि देता है। मैंने पेपैल एसओएपी एपीआई उदाहरणों का पालन किया जो मैं एसओएपी एक्सएमएल बनाने के लिए वेब पर पा सकता हूं लेकिन वे पतले हैं। मैं पेपैल के एपीआई को एसओएपी अनुरोध भेजने के लिए मैक के पीएडब्लू प्रोग्राम का उपयोग कर रहा हूं लेकिन इस समस्या को एक HTTP क्लाइंट का उपयोग करके पुन: उत्पन्न किया जाना चाहिए।

मैंने पेपैल की आरईएसटी एपीआई का उपयोग करने की कोशिश की लेकिन there's no method to get transaction details (उदा। नाम, ईमेल, राशि का भुगतान, कस्टम फ़ील्ड)। मैंने NVP (Name-Value-Pair) API का उपयोग करने की भी कोशिश की और मुझे लेनदेन के विवरण वापस मिलते हैं लेकिन यह मुझे लेनदेन के लिए सभी संग्रहीत कस्टम फ़ील्ड नहीं देता है। जब मैं पेपैल में लॉग इन करता हूं, और एक लेनदेन देखता हूं, तो मैं उस लेनदेन के सभी कस्टम फ़ील्ड देख सकता हूं, इसलिए मुझे पता है कि वे संग्रहीत किए जा रहे हैं।

एसओएपी एपीआई मेरी आखिरी उम्मीद है।

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="urn:ebay:api:PayPalAPI" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:ed="urn:ebay:apis:EnhancedDataTypes"> 
     <soapenv:Header> 
      <ns:RequesterCredentials> 
       <ebl:Credentials> 
        <ebl:Username>soap_api_username_here</ebl:Username> 
        <ebl:Password>soap_api_password_here</ebl:Password> 
        <ebl:Signature>soap_api_signature_here</ebl:Signature> 
       </ebl:Credentials> 
      </ns:RequesterCredentials> 
     </soapenv:Header> 
     <soapenv:Body> 
      <ns:GetTransactionDetailsReq> 
       <ns:GetTransactionDetailsRequest> 
        <ebl:Version>93.0</ebl:Version> 
        <ebl:TransactionID>8FX18476NR449891W</ebl:TransactionID> 
       </ns:GetTransactionDetailsRequest> 
      </ns:GetTransactionDetailsReq> 
     </soapenv:Body> 
</soapenv:Envelope> 

यहाँ प्रतिक्रिया मैं पेपैल सोप API से प्राप्त है::

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ed="urn:ebay:apis:EnhancedDataTypes" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI"> 
     <SOAP-ENV:Header> 
     <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"/> 
     <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType"> 
      <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType"> 
      <Username xsi:type="xs:string"/> 
      <Password xsi:type="xs:string"/> 
      <Signature xsi:type="xs:string"/> 
      <Subject xsi:type="xs:string"/> 
      </Credentials> 
     </RequesterCredentials> 
     </SOAP-ENV:Header> 
     <SOAP-ENV:Body id="_0"> 
     <GetTransactionDetailsResponse xmlns="urn:ebay:api:PayPalAPI"> 
      <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2016-08-02T16:43:02Z</Timestamp> 
      <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Failure</Ack> 
      <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">a464c181339f4</CorrelationID> 
      <Errors xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:ErrorType"> 
      <ShortMessage xsi:type="xs:string">Transaction refused because of an invalid argument. See additional error messages for details.</ShortMessage> 
      <LongMessage xsi:type="xs:string">The transaction id is not valid</LongMessage> 
      <ErrorCode xsi:type="xs:token">10004</ErrorCode> 
      <SeverityCode xmlns="urn:ebay:apis:eBLBaseComponents">Error</SeverityCode> 
      </Errors> 
      <Version xmlns="urn:ebay:apis:eBLBaseComponents">93.0</Version> 
      <Build xmlns="urn:ebay:apis:eBLBaseComponents">000000</Build> 
      <PaymentTransactionDetails xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:PaymentTransactionType"> 
      <ReceiverInfo xsi:type="ebl:ReceiverInfoType"/> 
      <PayerInfo xsi:type="ebl:PayerInfoType"> 
       <PayerStatus xsi:type="ebl:PayPalUserStatusCodeType">verified</PayerStatus> 
       <PayerName xsi:type="ebl:PersonNameType"/> 
       <Address xsi:type="ebl:AddressType"> 
       <AddressOwner xsi:type="ebl:AddressOwnerCodeType">PayPal</AddressOwner> 
       <AddressStatus xsi:type="ebl:AddressStatusCodeType">None</AddressStatus> 
       </Address> 
      </PayerInfo> 
      <PaymentInfo xsi:type="ebl:PaymentInfoType"> 
       <TransactionType xsi:type="ebl:PaymentTransactionCodeType">none</TransactionType> 
       <PaymentType xsi:type="ebl:PaymentCodeType">none</PaymentType> 
       <PaymentStatus xsi:type="ebl:PaymentStatusCodeType">None</PaymentStatus> 
       <PendingReason xsi:type="ebl:PendingStatusCodeType">none</PendingReason> 
       <ReasonCode xsi:type="ebl:ReversalReasonCodeType">none</ReasonCode> 
      </PaymentInfo> 
      <PaymentItemInfo xsi:type="ebl:PaymentItemInfoType"> 
       <Subscription xsi:type="ebl:SubscriptionInfoType"/> 
       <Auction xsi:type="ebl:AuctionInfoType"/> 
      </PaymentItemInfo> 
      </PaymentTransactionDetails> 
     </GetTransactionDetailsResponse> 
     </SOAP-ENV:Body> 
    </SOAP-ENV:Envelope> 

मुझे यकीन है कि मैं गलत क्या कर रहा नहीं कर रहा हूँ

यहाँ सोप लिफाफा अनुरोध मैं उपयोग कर रहा हूँ है लेकिन हो सकता है कि अधिक अनुभव वाला कोई व्यक्ति त्रुटि से अधिक आसानी से स्पॉट कर सके। मैंने पेपैल आरईएसटी एपीआई के बारे में किसी अन्य उपयोगकर्ता के प्रश्न का जवाब दिया और उससे लेनदेन का विवरण प्राप्त किया लेकिन जहां तक ​​मुझे पता है, Get customer details after transaction करने का कोई तरीका नहीं है। यदि आपको आरईएसटी एपीआई के साथ इसे पूरा करने का कोई तरीका मिल गया है, तो मुझे बताएं क्योंकि मैं एसओएपी की तुलना में आरईएसटी का अधिक उपयोग करूंगा।

धन्यवाद।

+0

आपकी सर्वर साइड भाषा क्या है जिसे आप प्राप्त करने के लिए उपयोग कर रहे हैं? मैं एएसपीनेट का उपयोग कर रहा हूं, लेकिन यकीन है कि यह एक्सएमएल का उपयोग नहीं कर रहा है। – JustJohn

+0

@ जस्ट जॉन मैं पेपैल एसओएपी एपीआई को कॉल करने के लिए PHP का उपयोग करने की योजना बना रहा था, लेकिन अगर मैं इसे Paw या Postman के साथ काम नहीं कर पा रहा हूं, तो मुझे संदेह है कि PHP कॉल काम करेगा और मुझे और भ्रमित कर देगा। यदि आप पेपैल एसओएपी एपीआई का उपयोग कर रहे हैं, तो आप एएसपीनेट प्रोग्राम पेपैल एसओएपी एपीआई को भेजने के लिए एक्सएमएल कॉल संकलित कर रहे हैं। –

उत्तर

1

त्रुटि संदेश एक रेड हेरिंग है। पेपैल को किसी भी लेनदेन आईडी नहीं मिल रहा है, खाली लेनदेन आईडी को अवैध के रूप में रिपोर्ट करना।

लेनदेन आईडी तत्व urn:ebay:api:PayPalAPI नामस्थान से संबंधित है। आपका एक्सएमएल urn:ebay:apis:eBLBaseComponents नेमस्पेस से जोड़ता है। आपको बस इतना करना है कि ebl:TransactionId से ns:TransactionId बदलें।

<?xml version="1.0" encoding="UTF-8"?> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="urn:ebay:api:PayPalAPI" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:ed="urn:ebay:apis:EnhancedDataTypes"> 
    <soapenv:Header> 
     <ns:RequesterCredentials> 
      <ebl:Credentials> 
       <ebl:Username>soap_api_username_here</ebl:Username> 
       <ebl:Password>soap_api_password_here</ebl:Password> 
       <ebl:Signature>soap_api_signature_here</ebl:Signature> 
      </ebl:Credentials> 
     </ns:RequesterCredentials> 
    </soapenv:Header> 
    <soapenv:Body> 
     <ns:GetTransactionDetailsReq> 
      <ns:GetTransactionDetailsRequest> 
       <ebl:Version>204.0</ebl:Version> 
       <ns:TransactionID>8FX18476NR449891W</ns:TransactionID> 
      </ns:GetTransactionDetailsRequest> 
     </ns:GetTransactionDetailsReq> 
</soapenv:Body> 

चेक इस example at the PayPal KB

+0

यह काम करता है। ऐसा लगता है कि पेपैल की एसओएपी एपीआई अभी भी स्टोर किए जा सकने वाले संभावित सात विकल्पों में से दो को पुनः प्राप्त करेगी। यह एनवीपी और एसओएपी एपीआई के साथ एक ज्ञात समस्या है http://stackoverflow.com/questions/16764186/gettransactiondetails-doesnt-report-part-of-the-order- विकल्प –

0

मैं इसे एक टिप्पणी के रूप में रखता था लेकिन यह गोबली गूक से भरा हुआ है। रास्ते से बाहर होने की कीमत पर शायद मैं कुछ मदद की हो सकती है। तो मेरा vb.net कोड पेपैल में एक फॉर्म भेजता है जिसमें "notify_url" शामिल है।

  ' determining the URL to work with depending on whether sandbox or a real PayPal account should be used 
      If strRealOrSand = "Sand" Then 
       URL = "https://www.sandbox.paypal.com/cgi-bin/webscr" 
       business = "[email protected]" ' AppSettings("BusinessEmail") (sandbox account business email) 
      ElseIf strRealOrSand = "Real" Then 
       URL = "https://www.paypal.com/cgi-bin/webscr" 
       business = "[email protected]" ' AppSettings("BusinessEmail") (real pay pal account account business email) 
      End If 

notify_url = "http://www.xxxxx.com/accounts/done.aspx" 



    <form id="payForm" method="post" action="<%Response.Write (URL)%>" > 
     <input type="hidden" name="cmd" value="<%Response.Write (cmd)%>" /> 
     <input type="hidden" name="business" value="<%Response.Write (business)%>" /> 
     <input type="hidden" name="item_name" value="<%Response.Write (item_name)%>" /> 
     <input type="hidden" name="amount" value="<%Response.Write (amount)%>" /> 
     <input type="hidden" name="no_shipping" value="<%Response.Write (no_shipping)%>" /> 
     <input type="hidden" name="return" value="<%Response.Write (return_url)%>" /> 
     <input type="hidden" name="rm" value="<%Response.Write (rm)%>" /> 
     <input type="hidden" name="notify_url" value="<%Response.Write (notify_url)%>" /> 
     <input type="hidden" name="cancel_return" value="<%Response.Write (cancel_url)%>" /> 
     <input type="hidden" name="currency_code" value="<%Response.Write (currency_code)%>" /> 
     <input type="hidden" name="custom" value="<%Response.Write (row_id)%>" /> 
    </form> 

    <script type="text/javascript"> 
     document.forms["payForm"].submit(); 
    </script> 

</body> 

तब मेरे "notify_url" पृष्ठ लोड में यह क्या पेपैल वापस भेजता लेन-देन पूर्ण करने के बाद हो जाता है। आपको पता चलेगा कि डीबग ईमेल का एक टन मुझे वापस भेजा जा रहा है। यह मेरा काम था।

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim vReceived As String = "" 
     Dim vFormValues As String = "" 
     Dim vResponder As String = "" 
     Dim strE As String = "" 
     Dim intAccountID As Integer = 0 
     Dim intCreditsPurchased As Integer = 0 

     Dim vWebRequest As System.Net.HttpWebRequest 
     Dim vSSend As Boolean = False 
     'vWebRequest = CType(System.Net.WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr"), System.Net.HttpWebRequest) 
     vWebRequest = CType(System.Net.WebRequest.Create("https://www.paypal.com/cgi-bin/webscr"), System.Net.HttpWebRequest) 



     vWebRequest.Method = "POST" 
     vWebRequest.ServicePoint.Expect100Continue = False 
     vWebRequest.ContentType = "application/x-www-form-urlencoded" 



     Try 
      vFormValues = Encoding.ASCII.GetString(Request.BinaryRead(Request.ContentLength)) 
      vReceived = "cmd=_notify-validate&" & vFormValues 
     Catch ex As Exception 
      sSend_Mail_From_done_aspx("Requested Form.ToString", ex.ToString) 
     End Try 

     vWebRequest.ContentLength = vReceived.Length 
     Dim vStreamOut As System.IO.StreamWriter = New System.IO.StreamWriter(vWebRequest.GetRequestStream(), Encoding.ASCII) 
     vStreamOut.Write(vReceived) 
     vStreamOut.Close() 
     Dim vStreamIn As New System.IO.StreamReader(vWebRequest.GetResponse().GetResponseStream()) 
     vResponder = vStreamIn.ReadToEnd() 
     vStreamIn.Close() 



     Dim vFieldName As String 
     Dim vFieldValue As String = "" 
     Dim vFields As New Collection 

     For Each vFieldName In Request.Form 
      'strE = strE & Request.Form.Item(vFieldName) & " " 
      strE &= vFieldName & ": " & Request.Form.Item(vFieldName) & vbCrLf 
      'vFieldValue = Request.Form.Item(vFieldName) 
      'vFields.Add(Decode(vFieldValue), Decode(vFieldName).ToLower) 
     Next 

     sSend_Mail_From_done_aspx("BEFORE VERIFIED CHECK, WHAT vResponder CONTAINS", strE) 


     Dim transactionID As String = "" 
     Dim dblAmount As Double 
     Dim intRowID As Integer 
     Dim dblPayPalFee As Double 

     Dim strMemo As String = "" 
     Dim strPayerEmail As String = "" 
     Dim strPaymentDate As String = "" 

     If Trim(vResponder).ToUpper = "VERIFIED" Then 

      For Each vFieldName In Request.Form 
       strE &= vFieldName & ": " & Request.Form.Item(vFieldName) & vbCrLf 

      Next 

      sSend_Mail_From_done_aspx("VERIFIED CAME THROUGH", strE) 

      Try 
       transactionID = Request.Form.Item("txn_id").ToString() 
       dblAmount = CType(Request.Form.Item("payment_gross"), Double) 
       intRowID = CType(Request.Form.Item("custom"), Integer) 
       dblPayPalFee = CType(Request.Form.Item("payment_fee"), Double) 
       If Len(Request.Form.Item("memo") & "") <> 0 Then 
        strMemo = Request.Form.Item("memo").ToString.Replace("'", "") 
       End If 
       strPayerEmail = Request.Form.Item("payer_email").ToString 
       strPaymentDate = Request.Form.Item("payment_date").ToString 


      Catch ex As Exception 
       sSend_Mail_From_done_aspx("Request.QueryString)", ex.ToString) 
      End Try 


      Try 

       '============================== 
       'SAVE TRANSACTION INFO HERE 
       '============================== 
       Dim sb As New StringBuilder 
       sb.Append("UPDATE dbo.tblTransactions ") 
       sb.Append("SET pp_txn_id='" & transactionID & "'") 
       sb.Append(", pp_payment_gross=" & dblAmount) 
       sb.Append(", pp_mc_fee=" & dblPayPalFee) 
       sb.Append(", memo='" & strMemo & "'") 
       sb.Append(", pp_payer_email='" & strPayerEmail & "'") 
       sb.Append(", pp_payment_date='" & strPaymentDate & "'") 
       sb.Append(" WHERE RowID =" & intRowID) 

       'SEND SQL TO DEVELOPER 
       sSend_Mail_From_done_aspx("INSERT statement BEFORE action", sb.ToString) 

       Dim conn As New SqlConnection(f1.fUseThisConnection(Server.MachineName)) 
       Dim cmd As New SqlCommand(sb.ToString, conn) 

       cmd.Connection.Open() 
       cmd.ExecuteNonQuery() 

       '========================================================= 
       'UPDATE ACCOUNT INFO HERE (ADD CREDITS TO CURRENT AMOUNT) 
       '========================================================= 
       Dim dr As System.Data.SqlClient.SqlDataReader 


       sb.Length = 0 
       'GET ACCOUNT ID, AND CreditsPurchased 
       sb.Append("SELECT AccountID, CreditsPurchased FROM dbo.tblTransactions ") 
       sb.Append(" WHERE RowID =" & intRowID) 

       cmd.CommandText = sb.ToString 
       dr = cmd.ExecuteReader() 

       If dr.Read() Then 

        intAccountID = dr("AccountID") 
        intCreditsPurchased = dr("CreditsPurchased") 


       End If 

       dr.Close() 


       sb.Length = 0 

       'AT 1.10 A CREDIT, WE DIVIDE THE AMOUNT PAYPAY CHARGES BY THIS TO GET CREDITS PURCHASED 

       sb.Append("UPDATE dbo.tblAL SET Credits = Credits + " & intCreditsPurchased) 
       sb.Append(" WHERE AccountID =" & intAccountID) 

       cmd.CommandText = sb.ToString 
       cmd.ExecuteNonQuery() 

       'SEND ACCOUNT UPDATE AMOUNT TO DEVELOPER 
       sSend_Mail_From_done_aspx(intCreditsPurchased & " CREDITS ADDED TO ", sb.ToString) 

       cmd.Dispose() 
       conn.Close() 
       conn = Nothing 

       MySession.Credits = intCreditsPurchased 


      Catch ex As Exception 
       sSend_Mail_From_done_aspx("tblTransactions NOT UPDATED with Transaction Info", ex.ToString()) 
      End Try 

     Else 
      sSend_Mail_From_done_aspx(Trim(vResponder).ToUpper, "TRANSACTION NOT VERIFIED") 

     End If 
    End Sub 

मुझे लगता है कि अनुरोध/प्रतिक्रियाओं इन नीचे हैं:

सबमिट किए गए फ़ॉर्म

URL = "https://www.paypal.com/cgi-bin/webscr" 

"notify_url" है कि प्रस्तुत की है

अंदर यह करने के लिए वापस भेजता है
Dim vWebRequest As System.Net.HttpWebRequest 
      Dim vSSend As Boolean = False 
      'vWebRequest = CType(System.Net.WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr"), System.Net.HttpWebRequest) 
      vWebRequest = CType(System.Net.WebRequest.Create("https://www.paypal.com/cgi-bin/webscr"), System.Net.HttpWebRequest) 

ज़रूर एक "PayPalFiddle" के लिए अच्छा होगा haha ​​

संबंधित मुद्दे