Opayo API - 无法验证签名

问题描述 投票:0回答:2

我一直在尝试连接到 Opayo“报告和管理 API”并使用命令“getTransactionDetail”(https://developer-eu.elavon.com/docs/opayo-reporting-api/reporting-commands/gettransactiondetail ), 但不断返回错误 0010,这表明 API 无法验证签名值。我们已经能够使用我们的供应商/用户名/密码组合登录,验证它们都是正确的。

我们在向 API 发送 POST 时使用的代码如下 - 为了安全起见,某些元素被屏蔽了。

using System;
using System.Collections.Specialized;
using System.Security.Cryptography;
using System.Text;
using System.Net;

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string signature = "<command>getTransactionDetail</command><vendor>[Vendor]</vendor><user>[User]</user><vendortxcode>[VendorTXCode]</vendortxcode><password>[Password]</password>";

        using (MD5 md5 = MD5.Create())
        {
            byte[] inputBytes = Encoding.Unicode.GetBytes(signature);
            byte[] hashBytes = md5.ComputeHash(inputBytes);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hashBytes.Length; i++)
            {
                sb.Append(hashBytes[i].ToString("X2"));
            }
            signature = sb.ToString();
        }

        string xmlToPost = "<vspaccess><command>getTransactionDetail</command><vendor>[Vendor]</vendor><user>[User]</user><vendortxcode>[VendorTXCode]</vendortxcode><signature>" + signature + "</signature></vspaccess>";

        using (WebClient client = new WebClient())
        {
            client.BaseAddress = "https://test.sagepay.com";
            client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            client.Encoding = Encoding.UTF8;

            var content = new NameValueCollection()
            {
                { "XML", xmlToPost }
            };

            string response = Encoding.UTF8.GetString(client.UploadValues("/access/access.htm", content));
        }
    }
}

解决此问题的任何帮助将不胜感激!

c# asp.net md5 opayo
2个回答
1
投票

事实证明,由于我们使用 Forms 集成进行初始付款,我们不得不改用以下 API 文档:https://developer-eu.elavon.com/docs/opayo/spec/api-reference

更具体地说,这部分与重复有关:https://developer-eu.elavon.com/docs/opayo/spec/api-reference#operation/createTransaction

注意右侧的代码示例!


0
投票

如果它帮助其他人寻找 Opayo Admin 和 Reporting API 帮助:

我有同样的问题,所以我在这里为 API 客户端代码创建了一个 NuGet 包:https://github.com/joeratzer/opayo-admin-and-reporting-api-client.

您可以在这里找到 NuGet 包:

https://www.nuget.org/packages/Joe.Opayo.Admin.Api.Client/1.1.0

客户端应用程序允许这样的代码:

var client = new OpayoAdminApiClient();
var isTest = true;
var request = new OpayoApiRequest(ApiCommandType.GetTransactionDetail, "password", isTest, "user-name", "vendor-name");
var commandSpecificXml = "<vendortxcode>01Jan2010Transaction12345</vendortxcode>"; 
return await client.ProcessApiCommandAsync<TransactionDetail>(request, commandSpecificXml);
© www.soinside.com 2019 - 2024. All rights reserved.