1

我一直在尝试使用 amazon sdk for .net 将 amazon pay 与我的 mvc 应用程序集成。我按照此处提到的步骤进行操作。我可以使用在卖家账户中创建的私钥和公钥创建客户端。

using Amazon.Pay.API.Types;
using Amazon.Pay.API.WebStore;

public class Sample
{
    public WebStoreClient InitiateClient()
    {
        // set up config
        var payConfiguration = new ApiConfiguration
        (
            region: Region.Europe,
            publicKeyId: "MY_PUBLIC_KEY_ID", // LIVE-XXXXX or SANDBOX-XXXXX
            privateKey: "PATH_OR_CONTENT_OF_MY_PRIVATE_KEY"
        );

        // init API client
        var client = new WebStoreClient(payConfiguration);

        return client;
    }
}

当我尝试创建签名时使用客户端我收到异常为不支持的私钥格式

using Amazon.Pay.API.WebStore.CheckoutSession;
using Amazon.Pay.API.WebStore;

public class Sample : PageModel
{
    // ..

    public string Signature { get; private set; }

    public string Payload { get; private set; }

    public void OnGet()
    {
        // prepare the request
        var request = new CreateCheckoutSessionRequest
        (
            checkoutReviewReturnUrl: "https://example.com/review.html",
            storeId: "amzn1.application-oa2-client.000000000000000000000000000000000"
        );

        // generate the button signature
        var signature = client.GenerateButtonSignature(request);

        // generate the signature and payload string that is passed back to the frontend
        Signature = client.GenerateButtonSignature(request);
        Payload = request.ToJson();
    }
}

异常的堆栈跟踪

   at Amazon.Pay.API.SignatureHelper.GenerateSignature(String stringToSign)
   at Amazon.Pay.API.WebStore.WebStoreClient.GenerateButtonSignature(String jsonString)
   at Amazon.Pay.API.WebStore.WebStoreClient.GenerateButtonSignature(CreateCheckoutSessionRequest request)
4

1 回答 1

1

提供私钥有两种方式:1/.pem 文件的完整文件路径或 2/.pem 的字符串内容

您没有提及您选择了哪个选项,因此我将简要概述每个选项。

  1. .pem 文件的完整路径。我建议在初始化 WebStoreClient 之前设置一个调试断点,以确保您提供的路径有效并且实际加载了文件内容。这是错误的最常见原因 - 文件路径无效,导致未加载私钥。

    var payConfiguration = new ApiConfiguration
        (
            region: Region.Europe,
            publicKeyId: "YOUR_PUBLIC_KEY_ID", 
            privateKey: "C:\\temp\\ap.pem"
        );
    
  2. .pem 文件的字符串内容。这里最常见的错误原因是复制/粘贴错误,其中可能会无意中添加特殊字符。

    var payConfiguration = new ApiConfiguration
       (
           region: Region.Europe,
           publicKeyId: "YOUR_PUBLIC_KEY_ID", 
           privateKey: "-----BEGIN PRIVATE KEY-----\nXXXXX\n-----END PRIVATE KEY-----"
       );
    

我总是告诫不要对私钥的字符串或路径进行硬编码,并鼓励尽可能从安全的密钥库中加载这些凭据。

于 2021-10-20T15:19:41.163 回答