如何使用C#在Firstdata支付网关中实施补偿支付 [英] How Do I Implement Recuuring Payment In Firstdata Payment Gateway Using C#

查看:76
本文介绍了如何使用C#在Firstdata支付网关中实施补偿支付的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在第一个数据支付网关中实施定期付款。我正在使用它的API。如何使用c#

I want to implement recurring payment in first-data payment gateway.I am using its API.How to implement Recurring payment in firstData Gateway using c#

推荐答案

在firstData网关中实现定期付款,永远,接受来自不安全的网站的代码处理任何与真钱有关的事情。

你不知道是谁给你代码,你不知道它做了什么,你不知道它将资金正确地放入适当的帐户,而不将细节传递给任何第三方。



只能从FirstData获取此类代码 - 否则欺诈的范围很远太大了。请记住,如果您的行为被视为疏忽,您个人可能要承担任何损失的责任 - 从公共论坛获取您的代码肯定会是!
Never, ever, accept code from a insecure website to handle anything to do with real money.
You do not know who is giving you the code, you do not know what it does, you do not know that it places the monies correctly into the appropriate account, without passing the details to any third parties.

Only get such code from FirstData themselves - the scope for fraud otherwise is far too large. And remember, you personally could be liable for any monies lost if your action is seen to be negligent - which getting your code from a public forum would most certainly be!


我使用下面的代码:

on index.aspx

I m using below code:
on index.aspx
public async Task<ActionResult> Index()
        {
            var amount = "1";
            var cardExpirtyDate = "1215";
            var cardHolderName = "Card Holder Name";
            var cardNumber = "4111111111111111";
            var customerId = 23;//Internal purpose to track which customer made the transaction....
            //var paymentService = new PaymentService(amount, cardExpirtyDate, cardHolderName, cardNumber, customerId.ToString());
            var paymentService = new PaymentService(amount, cardExpirtyDate, cardHolderName, cardNumber, customerId.ToString(), "091515", "091530", "1", "2");
            var transactionResult = await paymentService.PostAsync();
            if (transactionResult == null) return View();
            if (transactionResult.TransactionApproved && !transactionResult.TransactionError
                    && transactionResult.CustomerRef == customerId.ToString())
            {
                //transaction success....
                TempData["TRANSACTION_STATUS"] = "APPROVED";
            }
            else
            {
                var message = transactionResult.Message;
            }
            return View();
        }




$ $ $ $ $ $ $ $ $ $ $ b $私人字符串RequestXml

{

get

{

var builder = new StringBuilder();

var writer = new StringWriter(使用(var xml = XmlWriter.Create(writer,new XmlWriterSettings {Indent = true,OmitXmlDeclaration = true,NewLineOnAttributes = true}))

{ using />
xml.WriteStartElement(Transaction);

xml.WriteElementString(ExactID,GatewayId); //网关ID

xml.WriteElementString( Password,GatewayPwd); //密码

xml.WriteElementString(Transaction_Type,TransactionType);

xml.WriteElementString(DollarAmount,Amount);

xml.WriteElementString(Expiry_Date,CardExpiryDa te);

xml.WriteElementString(CardHoldersName,CardHolderName);

xml.WriteElementString(Card_Number,CardNumber);

xml .WriteElementString(Customer_Ref,CustomerId);

//由sumit添加

xml.WriteElementString(Ecommerce_Flag,2);

//xml.WriteElementString(,recuurAmt);

xml.WriteEndElement();

writer.Flush();

}

writer = null;

返回builder.ToString();

}

}



内部PaymentService(字符串金额,字符串cardExpiryDate,字符串cardHolderName,字符串cardNumber,字符串customerId,字符串recurryingSdate,字符串recurryingEDate,字符串recuurAmount,字符串EFlag)

//内部支付mentService(string amount,string cardExpiryDate,string cardHolderName,string cardNumber,string customerId)

{

GatewayId = ConfigurationManager.AppSettings [GATEWAY_ID];

GatewayPwd = ConfigurationManager.AppSettings [GATEWAY_PWD];

TransactionType = ConfigurationManager.AppSettings [TRANS_TYPE];

HmacKey = ConfigurationManager.AppSettings [HMAC_KEY ];

KeyId = ConfigurationManager.AppSettings [KEY_ID];

金额=金额;

BillingId = ConfigurationManager.AppSettings [x_recurring_billing_id ];

CardExpiryDate = cardExpiryDate;

CardHolderName = cardHolderName;

CardNumber = cardNumber;

CustomerId = customerId;

recuurAmt = recuurAmount;

recurStart = recurryingSdate;

recurEnd = recurryingEDate;

Flag = EFlag;

}



内部异步任务< transactionresult> PostAsync()

{

var xmlBytes = new ASCIIEncoding()。GetBytes(RequestXml);

var sha1Crypto = new SHA1CryptoServiceProvider();

var hashContent = BitConverter.ToString(sha1Crypto.ComputeHash(xmlBytes))。替换( - ,)。ToLower();

var time = DateTime.UtcNow .ToString(yyyy-MM-ddTHH:mm:ssZ);

var hashData = string.Format({0} \ n {1} \\\
{2} \ n {3} \ n {4},HttpMethod,MessageType,hashContent,time,TransactionVer);

var hmacSha = new HMACSHA1(Encoding.UTF8.GetBytes(HmacKey));

var hmacData = hmacSha.ComputeHash(Encoding.UTF8.GetBytes(hashData));

var base64Hash = Convert.ToBase64String(hmacData);

var responseXml = string.Empty;



尝试

{

使用(var client = new HttpClient())

{

使用(var request = new HttpRequestMessage(System.Net.Http.HttpMethod.Post,ApiUri))

{

request.Headers .Add(x-gge4-date,time);

request.Headers.Add(x-gge4-content-sha1,hashContent);

请求.Headers.Add(授权,GGE4_API+ KeyId +:+ base64Hash);

request.Content = new StringContent(RequestXml);

请求。 Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse(MessageType);



using(var response = await client.SendAsync(request)。 ConfigureAwait(false))

{

if(response.StatusCode == System.Net.HttpStatusCode.Created || response.StatusCode == System.Net.HttpStatusCode.OK)

responseXml = await response.Content.ReadAsStringAsync()。ConfigureAwait(false);

else

LogStatusCode(response.StatusCode.ToString());

}

request.Content.Dispose();

}

}

返回等待ParseXml(responseXml);

}

catch(例外)

{

/ *日志例外* /

}

返回await Task.FromResult< transactionresult>(null);

}



on PaymentService.cs
private string RequestXml
{
get
{
var builder = new StringBuilder();
var writer = new StringWriter(builder);
using (var xml = XmlWriter.Create(writer, new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, NewLineOnAttributes = true }))
{
xml.WriteStartElement("Transaction");
xml.WriteElementString("ExactID", GatewayId);//Gateway ID
xml.WriteElementString("Password", GatewayPwd);//Password
xml.WriteElementString("Transaction_Type", TransactionType);
xml.WriteElementString("DollarAmount", Amount);
xml.WriteElementString("Expiry_Date", CardExpiryDate);
xml.WriteElementString("CardHoldersName", CardHolderName);
xml.WriteElementString("Card_Number", CardNumber);
xml.WriteElementString("Customer_Ref", CustomerId);
//Added by sumit
xml.WriteElementString("Ecommerce_Flag", "2");
//xml.WriteElementString("", recuurAmt);
xml.WriteEndElement();
writer.Flush();
}
writer = null;
return builder.ToString();
}
}

internal PaymentService(string amount, string cardExpiryDate, string cardHolderName, string cardNumber, string customerId, string recurryingSdate, string recurryingEDate, string recuurAmount, string EFlag)
//internal PaymentService(string amount, string cardExpiryDate, string cardHolderName, string cardNumber, string customerId)
{
GatewayId = ConfigurationManager.AppSettings["GATEWAY_ID"];
GatewayPwd = ConfigurationManager.AppSettings["GATEWAY_PWD"];
TransactionType = ConfigurationManager.AppSettings["TRANS_TYPE"];
HmacKey = ConfigurationManager.AppSettings["HMAC_KEY"];
KeyId = ConfigurationManager.AppSettings["KEY_ID"];
Amount = amount;
BillingId = ConfigurationManager.AppSettings["x_recurring_billing_id"];
CardExpiryDate = cardExpiryDate;
CardHolderName = cardHolderName;
CardNumber = cardNumber;
CustomerId = customerId;
recuurAmt = recuurAmount;
recurStart = recurryingSdate;
recurEnd = recurryingEDate;
Flag = EFlag;
}

internal async Task<transactionresult> PostAsync()
{
var xmlBytes = new ASCIIEncoding().GetBytes(RequestXml);
var sha1Crypto = new SHA1CryptoServiceProvider();
var hashContent = BitConverter.ToString(sha1Crypto.ComputeHash(xmlBytes)).Replace("-", "").ToLower();
var time = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
var hashData = string.Format("{0}\n{1}\n{2}\n{3}\n{4}", HttpMethod, MessageType, hashContent, time, TransactionVer);
var hmacSha = new HMACSHA1(Encoding.UTF8.GetBytes(HmacKey));
var hmacData = hmacSha.ComputeHash(Encoding.UTF8.GetBytes(hashData));
var base64Hash = Convert.ToBase64String(hmacData);
var responseXml = string.Empty;

try
{
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, ApiUri))
{
request.Headers.Add("x-gge4-date", time);
request.Headers.Add("x-gge4-content-sha1", hashContent);
request.Headers.Add("Authorization", "GGE4_API " + KeyId + ":" + base64Hash);
request.Content = new StringContent(RequestXml);
request.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse(MessageType);

using (var response = await client.SendAsync(request).ConfigureAwait(false))
{
if (response.StatusCode == System.Net.HttpStatusCode.Created || response.StatusCode == System.Net.HttpStatusCode.OK)
responseXml = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
else
LogStatusCode(response.StatusCode.ToString());
}
request.Content.Dispose();
}
}
return await ParseXml(responseXml);
}
catch (Exception)
{
/*log exception here*/
}
return await Task.FromResult<transactionresult>(null);
}


这篇关于如何使用C#在Firstdata支付网关中实施补偿支付的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆