Max*_*Max 8 c# vb.net asp.net paypal
我需要为网站动态创建加密的"PayNow"paypal按钮.
我阅读了我在paypal网站上找到的所有文档.
我知道我需要使用BMCreateButton ButtonManager NVP API.
但我一直无法找到任何信息,也没有找到任何合理简单和记录的示例代码,关于我应该如何调用这些API.
我是否需要将参数放在表单中并将其发布到某种服务器上?
我是否需要将所有参数放在网址上,调用此网址,广告是否使用结果?
我该如何对此服务进行身份验证?
我将为不同的paypal商业帐户创建加密的paynow按钮.
有人能告诉我一些实际上称之为BMCreateButton NVP API的VB.Net或C#代码吗?
所以我可以看到:
各种链接到有用的资源
-由于这个答案我已经能够找到一些有用的示例代码在这里和那里有关如何调用API贝宝.
-这是有关paypal NVP API如何工作的更有用的信息.
-这是一个有趣的网站,为BMCreateButton API生成API调用URL
-在这里您可以找到获取"第三方"API凭据的说明.(感谢这个答案)
-这里有一些关于Paypal API集成的更多有用信息
-在这里你可以找到Paypal API的当前和最新版本号
更新1
现在我已经创建了一些实际执行某些操作的代码,但它给了我一个错误.此代码实际上使用BMCreateButton API创建加密的paynow按钮.它似乎有效,但当我点击paynow按钮时,它会显示所有付款参数,但也会显示错误
"您的安全订单解密时出现问题.请联系您的商家."
这是代码:
Public Shared Sub PaypalTest3web()
Dim NVP As New Dictionary(Of String, String)
Dim strUsername As String = "aso_1273063882_biz_api3.megatesto.it"
Dim strPassword As String = "1273063582"
Dim strSignature As String = "A22sd7623RGUsduDHDSFU57N7dfhfS23DUYVhdf85du8S6FJ6D5bfoh5"
Dim strNVPSandboxServer As String = "https://api-3t.sandbox.paypal.com/nvp"
NVP.Add("USER", strUsername)
NVP.Add("PWD", strPassword)
NVP.Add("SIGNATURE", strSignature)
Dim bvCount As Integer
bvCount = 0
NVP.Add("METHOD", "BMCreateButton")
NVP.Add("VERSION", "85.0")
NVP.Add("BUTTONCODE", "ENCRYPTED") ''CLEARTEXT / ENCRYPTED
NVP.Add("BUTTONTYPE", "BUYNOW")
NVP.Add("BUTTONSUBTYPE", "PRODUCTS") ''Optional: PRODUCTS / SERVICES
bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "business=D64TG758HIWj2") ''Merchant ID
'bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "cmd=_s-xclick") ''DONT SPECIFY the cmd parameter, if specifien it will generate an error on the decription of the "secure order", I don't know why...
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")
''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(strNVPSandboxServer), HttpWebRequest)
wrWebRequest.Method = "POST"
Dim requestWriter As New StreamWriter(wrWebRequest.GetRequestStream())
requestWriter.Write(param)
requestWriter.Close()
'' Get the response.
Dim responseReader As StreamReader
responseReader = New StreamReader(wrWebRequest.GetResponse().GetResponseStream())
''and 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 " & strNVPSandboxServer & vbCrLf &
HttpUtility.UrlDecode(param.Replace("&", vbCrLf & " ")) & vbCrLf & vbCrLf &
"Result:" & vbCrLf & result & vbCrLf & vbCrLf &
"--------------------------------------" & vbCrLf
''show the results
Trace.WriteLine(result)
MessageBox.Show(result)
End Sub
Run Code Online (Sandbox Code Playgroud)
这是HTML响应
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
">
<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="PayPal - Il sistema di pagamento online più facile e sicuro!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1">
</form>
Run Code Online (Sandbox Code Playgroud)
这是我点击这个加密的立即付款按钮后得到的错误

如您所见,所有参数(项目名称,价格,item_id ...)都是正确的.但是我无法理解为什么我会收到这个错误.
如果您想尝试此代码,则应替换您的API用户/密码/签名.生成的PayNow按钮仅在您登录PayPal沙盒帐户时有效.
你对如何解决这个错误有任何想法吗?
注意:解决此问题后,我需要了解如何为第三个paypal企业帐户创建加密按钮(我们需要为客户的paypal帐户创建加密按钮).使用我们的API凭据,客户商家代码,并在我们的客户paypal帐户中配置我们的API凭证是不应该...它说商家代码无效.可能我错过了一些东西......
更新2
似乎我已经找到了如何解决上述错误:只需删除"cmd = _s-xclick/_xclick"参数.如果未指定"cmd",则paynow按钮似乎不会生成任何错误.需要进行更多测试......无论如何,我已经在代码示例中对代码行进行了评论.
现在,回到商业.让我们做一些测试,然后找到为第三方paypal帐户创建paynow按钮的正确方法.
好的,最后我明白了!:-)
我的目标是为我们的一些客户"即时" 创建加密的 PayNow按钮. 以下是PayPal API如何与第三方访问配合使用的简要说明.
为什么这个简单而简洁的知识浪费时间分散在无数的PayPal帮助页面,PayPal PDF手册和第三方博客文章中,超出了我的理解:-)无论如何......
这是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
Run Code Online (Sandbox Code Playgroud)
这里是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);
}
Run Code Online (Sandbox Code Playgroud)
祝每个人都有一个愉快的PayPal集成:-)
更新(对于PHP编码器)
@Style要求一个有效的PHP示例...我不知道PHP,但我发现一些链接可能包含PHP编码器的有用信息,你可以在这些内容中寻找BMCreateButton api源文件:
| 归档时间: |
|
| 查看次数: |
5480 次 |
| 最近记录: |