How to create Encrypted PayNow button “on the fly” for Third-party customers, using Paypal NVP API?

后端 未结 1 1658
北恋
北恋 2020-12-15 00:00

I need to create Encrypted \"PayNow\" paypal buttons on the fly for a website.
I read all the documentation I can find on the paypal website.
I understood that I nee

相关标签:
1条回答
  • 2020-12-15 00:32

    Ok, finally I got it! :-)

    My objective is to create Encrypted PayNow buttons "on the fly" for some of our customers. Here is a brief explanation of how PayPal API works with Third-party access.

    • Create a Paypal Sandbox account (here)
    • In this sandbox account, create 2 new business account
      you should hook these business account to a credit card. This will mark these account as "verified", unless it won't work
      • The first account (account A) will represent our company
      • The second account (account B) will represent one of our customers
    • log in account A, and request the API credentials (instructions here)
    • log in account B, and grant API permission to account A (instruction here check the paragraph "Third-party authentication: Grant your cart the appropriate API authentication permissions")
    • grab the Api credentials of account A, and put them in your source code
    • grab Merchant ID and merchant Email of account B and put them in your source code
    • run the code
    • grab the returned html, put it on a web page, and test it, it should works
      (you need to be logged on your paypal sandbox account, or the generated button wont works)

    Why this simple and concise knowledge is timewastingly scattered among a countless number of PayPal help pages, PayPal PDF manuals, and third party blog post, is beyond my understanding :-) Anyway...

    Here is the working code in VB.Net

    Public Shared Sub PaypalThirdPartyPayNowButtonTest()
        Dim bvCount As Integer = 0  ''L_BUTTONVAR counter
        Dim NVP As New Dictionary(Of String, String)  ''Api Name-Value-Pair parameters
    
        ''define paypal SANDBOX server
        Dim paypalApiServerUrl As String = "https://api-3t.sandbox.paypal.com/nvp"
    
        ''define Api credentials of YOUR business paypal account 
        Dim yourApiUsername As String = "aso_1273063882_biz_api3.megatesto.it"
        Dim yourApiPassword As String = "1273063582"
        Dim yourApiSignature As String = "A22sd7623RGUsduDHDSFU57N7dfhfS23DUYVhdf85du8S6FJ6D5bfoh5"
    
        ''define Your CUSTOMER identification data
        Dim customerEmailID As String = "MyCustomer_143363961_biz@megatesto.it"
        Dim customerMerchantID As String = "3S4EF7BI96YHS"
    
    
        ''use YOUR identification data
        NVP.Add("USER", yourApiUsername)
        NVP.Add("PWD", yourApiPassword)
        NVP.Add("SIGNATURE", yourApiSignature)
    
        ''use your CUSTOMER identification data
        NVP.Add("SUBJECT", customerEmailID)
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "business=" & customerMerchantID) ''Merchant ID
    
    
        ''Api method name and version
        NVP.Add("METHOD", "BMCreateButton")
        NVP.Add("VERSION", "85.0")
    
        ''method specific parameters
        NVP.Add("BUTTONCODE", "ENCRYPTED")
        NVP.Add("BUTTONTYPE", "BUYNOW")
        NVP.Add("BUTTONSUBTYPE", "PRODUCTS")
    
        ''Buynow button specific parameters
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "lc=IT")
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "button_subtype=PRODUCTS")
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "item_name=Test_product")
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "item_number=123456")
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "amount=12.00")
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "currency_code=EUR")
        bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "quantity=1")
        ''bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "cmd=_s-xclick")  'DONT' specify the cmd parameter, if you specify it, it wont work, paypal will give you an error
    
        ''build the parameter string
        Dim paramBuilder As New StringBuilder
        For Each kv As KeyValuePair(Of String, String) In NVP
            Dim st As String
            st = kv.Key & "=" & HttpUtility.UrlEncode(kv.Value) & "&"
            paramBuilder.Append(st)
        Next
    
        Dim param As String
        param = paramBuilder.ToString
        param = param.Substring(0, param.Length - 1) ''remove the last '&'
    
    
        ''Create web request and web response objects, make sure you using the correct server (sandbox/live)
        Dim wrWebRequest As HttpWebRequest = DirectCast(WebRequest.Create(paypalApiServerUrl), HttpWebRequest)
        wrWebRequest.Method = "POST"
    
    
        Dim requestWriter As New StreamWriter(wrWebRequest.GetRequestStream())
        requestWriter.Write(param)
        requestWriter.Close()
    
        '' Get the responseReader
        Dim responseReader As StreamReader
        responseReader = New StreamReader(wrWebRequest.GetResponse().GetResponseStream())
    
        ''read the response
        Dim responseData As String
        responseData = responseReader.ReadToEnd()
        responseReader.Close()
    
    
        ''url-decode the results
        Dim result As String
        result = HttpUtility.UrlDecode(responseData)
    
        Dim formattedResult As String
    
        formattedResult = "Request on " & paypalApiServerUrl & vbCrLf &
                         HttpUtility.UrlDecode(param.Replace("&", vbCrLf & "  ")) & vbCrLf & vbCrLf &
                         "Result:" & vbCrLf & HttpUtility.UrlDecode(responseData.Replace("&", vbCrLf & "  ")) & vbCrLf & vbCrLf &
                         "--------------------------------------" & vbCrLf
    
        ''show the results
        Trace.WriteLine(formattedResult)
        MessageBox.Show(formattedResult)
    End Sub
    

    And here is the same code in C#

    public static void PaypalThirdPartyPayNowButtonTest()
    {
        int bvCount = 0; //L_BUTTONVAR counter
        Dictionary<string, string> NVP = new Dictionary<string, string>(); //Api Name-Value-Pair parameters
    
        //paypal SANDBOX server
        string paypalApiServerUrl = "https://api-3t.sandbox.paypal.com/nvp";
    
        //Api credentials of YOUR business paypal account 
        string yourApiUsername = "aso_1273063882_biz_api3.megatesto.it";
        string yourApiPassword = "1273063582";
        string yourApiSignature = "A22sd7623RGUsduDHDSFU57N7dfhfS23DUYVhdf85du8S6FJ6D5bfoh5";
    
        //Your CUSTOMER identification data
        string customerEmailID = "MyCustomer_143363961_biz@megatesto.it";
        string customerMerchantID = "3S4EF7BI96YHS";
    
        //use YOUR identification data
        NVP.Add("USER", yourApiUsername);
        NVP.Add("PWD", yourApiPassword);
        NVP.Add("SIGNATURE", yourApiSignature);
    
        //use your CUSTOMER identification data
        NVP.Add("SUBJECT", customerEmailID);
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "business=" + customerMerchantID);
    
        //Api method name and version
        NVP.Add("METHOD", "BMCreateButton");
        NVP.Add("VERSION", "85.0");
    
        //method specific parameters
        NVP.Add("BUTTONCODE", "ENCRYPTED");
        NVP.Add("BUTTONTYPE", "BUYNOW");
        NVP.Add("BUTTONSUBTYPE", "PRODUCTS");
    
        //Buynow button specific parameters
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "lc=IT");
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "button_subtype=PRODUCTS");
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "item_name=Test_product");
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "item_number=123456");
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "amount=12.00");
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "currency_code=EUR");
        bvCount++; NVP.Add("L_BUTTONVAR" + bvCount.ToString() , "quantity=1");
        //bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "cmd=_s-xclick")  //DON'T specify the cmd parameter, if you specify it, it wont work, paypal will give you an error
    
    
        //build the parameter string
        StringBuilder paramBuilder = new StringBuilder();
        foreach (KeyValuePair<string, string> kv in NVP)
        {
            string st = kv.Key + "=" + System.Web.HttpUtility.UrlEncode(kv.Value) + "&";
            paramBuilder.Append(st);
        }
    
        string param = paramBuilder.ToString();
        param = param.Substring(0, param.Length - 1); //remove the last '&'
    
    
        //Create web request and web response objects, make sure you using the correct server (sandbox/live)
        System.Net.HttpWebRequest wrWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(paypalApiServerUrl);
        wrWebRequest.Method = "POST";
    
        System.IO.StreamWriter requestWriter = new System.IO.StreamWriter(wrWebRequest.GetRequestStream());
        requestWriter.Write(param);
        requestWriter.Close();
    
    
        //Get the responseReader
        System.IO.StreamReader responseReader = new System.IO.StreamReader(wrWebRequest.GetResponse().GetResponseStream());
        string responseData = responseReader.ReadToEnd();
        responseReader.Close();
    
        //url-decode the results
        string result = System.Web.HttpUtility.UrlDecode(responseData);
    
        string formattedResult = "Request on " + paypalApiServerUrl + "\r\n" + System.Web.HttpUtility.UrlDecode(param.Replace("&", "\r\n  ")) + "\r\n\r\nResult:\r\n" + System.Web.HttpUtility.UrlDecode(responseData.Replace("&", "\r\n  ")) + "\r\n\r\n--------------------------------------\r\n";
    
        //show the results
        System.Diagnostics.Trace.WriteLine(formattedResult);
        System.Windows.Forms.MessageBox.Show(formattedResult);
    }
    

    I wish everyone a happy PayPal integration :-)

    Update (for PHP coder)
    @Style is asking for a working PHP example... I don't know PHP, but I've found some links that may contain useful information for PHP coder,: you can look for BMCreateButton api inside these source files:

    • PayPal "Authorization Failed"
    • Working example of paypal Website Payments Pro Hosted Solution Iframe?
    • http://code.google.com/p/my-project-phi/source/browse/trunk/Application/Services/PayPalService.php?r=61
    • http://plugins.svn.wordpress.org/stageshow/tags/1.1.4/include/mjslib_paypal_api.php
    • http://plugins.svn.wordpress.org/stageshow/trunk/include/mjslib_paypal_api.php
    • http://my-project-phi.googlecode.com/svn-history/r61/trunk/Application/Services/PayPalService.php
    0 讨论(0)
提交回复
热议问题