指着我的证书文件时,贝宝API倒下(Paypal API falls over when point

2019-09-19 21:37发布

我想DoCapture使用贝宝API的一些支付和我正在上的代码行,我的CertificateFile属性设置为我的证书文件的位置致命异常。

相关的代码如下:

using com.paypal.sdk.profiles;
using com.paypal.sdk.services;
using com.paypal.sdk.util;

IAPIProfile profile = ProfileFactory.createSignatureAPIProfile();
profile.CertificateFile = @"~\MyTestCertificate.txt";

向下钻取到异常细节并没有给我更多的信息,它或多或少只是证实了一个致命异常的确被抛出。

离开了波浪和反斜杠,像这样抛出了同样的错误:

profile.CertificateFile = @"MyTestCertificate.txt";

我想,也许我需要的文件的内容,而不是位置,所以我尝试以下,但得到了同样的错误:

profile.CertificateFile = new StreamReader(@"MyTestCertificate.txt").ReadToEnd().ToString();

看来,不管你设置CertificateFile属性,你会得到一个致命的异常。

几个问题:

  1. 我在哪里可以找到的关于贝宝API中的IAPIProfile类的文档,特别是文档中CertificateFile财产
  2. 如果我不应该把路给我的证书文件,在这个位置,我应该怎么办?

只是为了确认, MyTestCertificate.txt添加到我的解决方案,并Copy to Output Directory设置为Copy Always

唯一的例外全文如下:

{“异常类型的‘com.paypal.sdk.exceptions.FatalException’被抛出。”}

堆栈跟踪看起来是这样的:

at com.paypal.sdk.profiles.SignatureAPIProfile.set_CertificateFile(String value)
at MyProject_Payment_Processing.Paypal.DoCaptureCode(String authorization_id, String amount) in C:\Users\JMK\documents\visual studio 2010\Projects\MyProject Payment Processing\MyProject Payment Processing\Paypal.cs:line 16
at MyProject_Payment_Processing.Program.Main(String[] args) in C:\Users\JMK\documents\visual studio 2010\Projects\MyProject Payment Processing\MyProject Payment Processing\Program.cs:line 15
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

PayPal的API使用log4net的它记录错误像这样:

二零一二年七月二十日12点39分11秒FATAL [FatalException] com.paypal.sdk.exceptions.FatalException:类型com.paypal.sdk.exceptions.FatalException'引发的异常。

谢谢

Answer 1:

您必须安装证书的微软系统存储。 自述在SDK中解释了如何做到这一点使用WinHttpCertCfg工具。



Answer 2:

原来aydiv是正确的,我不得不用WinHttpCertCfg注册证书。 马丁也是对的,我用的是标识轮廓,而不是证书的个人资料。

我必须做的第一件事就是使用OpenSSL使用下面的命令来加密我的证书。 我在这里输入密码,这是我后来使用。 这创造了一个加密的证书文件名为paypal_cert.p12

OpenSSL的PKCS12 -export -in MyTestCertificate.txt -inkey MyTestCertificate.txt退房手续paypal_cert.p12

然后我安装WinHttpCertCfg和使用下面的命令来注册我的证书,代替PFXPassword因为我先前输入的密码:

winhttpcertcfg -i PFXFile -c LOCAL_MACHINE \我的-a JMK -p PFXPassword

另外,我是之前使用NVP DLL文件,而不是我需要使用SOAP的DLL从这里 。 这意味着我不得不更换NVPCallerServices在我的代码Callerservices ,与一些其他的东西一起。

我在C#.NET执行一个PayPal DoCapture最终代码如下,希望这将帮助别人谁在未来遇到了这个问题!

class Paypal
{
    public string DoCaptureCode(string authorization_id, string amount)
    {
        CallerServices caller = new CallerServices();

        IAPIProfile profile = ProfileFactory.createSSLAPIProfile();

        profile.APIUsername = "JMK";
        profile.APIPassword = "FooBar";
        profile.CertificateFile = @"~\MyTestCertificate.txt";
        profile.Environment = "sandbox";
        caller.APIProfile = profile;

        DoCaptureRequestType pp_request = new DoCaptureRequestType();
        pp_request.Version = "51.0";

        pp_request.AuthorizationID = authorization_id;
        pp_request.Amount = new BasicAmountType();
        pp_request.Amount.Value = amount;
        pp_request.Amount.currencyID = CurrencyCodeType.GBP;
        pp_request.CompleteType = CompleteCodeType.Complete;

        DoCaptureResponseType pp_response = new DoCaptureResponseType();
        pp_response = (DoCaptureResponseType)caller.Call("DoCapture", pp_request);
        return pp_response.Ack.ToString();
    }
}


文章来源: Paypal API falls over when pointing to my certificate file
标签: c# paypal