2013-06-07 2 views
0

Я пытаюсь создать зашифрованные URL-адреса для перенаправления клиента в PayPal для оплаты. Я загрузил свой собственный сертификат PayPal, скачал общедоступный сертификат PayPal, а также использовать следующий код, чтобы сделать работу:Paypal Зашифрованные платежи сайта с помощью ASP.NET

Dim _vals As String = "cert_id=ID" & vbLf & "cmd=_cart" & vbLf & _ 
       "business=businessemail" & vbLf & _ 
       "upload=1" & vbLf & _ 
       "no_shipping=1" & vbLf & _ 
       "custom=poidccffgd" & vbLf & _ 
       "invoice=oid12345" & vbLf & _ 
       "currency_code=EUR" & vbLf & _ 
       "item_name_1=" & _oname & vbLf & _ 
       "amount_1=" & _curps & vbLf & _ 
       "item_number_1=10" & vbLf & _ 
       "item_name_2=Free Bonus" & vbLf & _ 
       "amount_2=0" & vbLf & _ 
       "discount_rate_cart=30" 

    Dim _url As String = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_s-xclick&encrypted=" & Server.UrlEncode(EncryptX509(_vals)) 

Friend Shared Function EncryptX509(aData As String) As String 
    Dim _signerCert As New X509Certificates.X509Certificate2(MyPrivateCertificateByteArray, "password", X509Certificates.X509KeyStorageFlags.DefaultKeySet) 
    Dim _recipientCert As New X509Certificates.X509Certificate2(PayPalPublicCertificateByteArray) 
    'get data 
    '-------- 
    Dim messageBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(aData) 
    'sign 
    '---- 
    Dim content = New System.Security.Cryptography.Pkcs.ContentInfo(messageBytes) 

    Dim signed = New System.Security.Cryptography.Pkcs.SignedCms(content) 
    Dim signer = New System.Security.Cryptography.Pkcs.CmsSigner(_signerCert) 
    signed.ComputeSignature(signer) 
    Dim signedBytes = signed.Encode() 
    'encrypt 
    '------- 
    Dim content2 = New System.Security.Cryptography.Pkcs.ContentInfo(signedBytes) 
    Dim envMsg = New System.Security.Cryptography.Pkcs.EnvelopedCms(content2) 
    Dim recipient = New Pkcs.CmsRecipient(Pkcs.SubjectIdentifierType.IssuerAndSerialNumber, _recipientCert) 
    envMsg.Encrypt(recipient) 
    Dim encryptedBytes As Byte() = envMsg.Encode() 
    'format 
    '------ 
    Const PKCS7_HEADER As String = "-----BEGIN PKCS7-----" 
    Const PKCS7_FOOTER As String = "-----END PKCS7-----" 

    Dim base64 = Convert.ToBase64String(encryptedBytes) 
    Dim formatted = New StringBuilder() 
    formatted.Append(PKCS7_HEADER) 
    formatted.Append(base64) 
    formatted.Append(PKCS7_FOOTER) 
    Return formatted.ToString 
End Function 

Тем не менее, когда я иду в генерируемый URL он говорит, что не может декодировать сертификат ID! Я пробовал как в прямом эфире, так и в песочнице и получил тот же результат. В чем проблема с этим кодом? Как получить рабочий EWP с ASP.NET? Пожалуйста, не предлагайте альтернативные методы, такие как размещенная Express Checkout или размещенные кнопки.

спасибо.

ответ

0

Похоже, что этот код верен. Он работал с PayPal, но не с SandBox, вероятно, из-за того, что я не загрузил сертификат в SandBox.

Смежные вопросы