ASP.NET 核心中的 PayPal
PayPal in ASP.NET Core
如何在 ASP.NET Core
应用程序中集成 PayPal API
?我尝试了各种库,但其中 none 与 ASP.NET Core
兼容...我该怎么做?
我遇到了同样的问题。我可能会选择没有 SDK 的 REST API 实现:
https://developer.paypal.com/docs/api/
或者我刚找到那个存储库,它可能很有趣:)
https://github.com/geoperez/PayPalCore
它是当前.Net SDK 到.NETCore 的端口。我还没有检查代码,但如果它能工作,那将节省很多时间!
您也可以选择旧的 API 选项:
http://www.codeproject.com/Articles/42894/Introduction-to-PayPal-for-C-ASP-NET-developers
但由于它太旧了,我不推荐它,因为 PayPal 可能有一天会停止使用它。
但是您可以在那里找到更多信息:
我和你有同样的问题。
寻找了数周,发现没有办法让 SDK API 与 .Net Core
一起工作
您有几个选择,首先使用 4.6 或其他版本重新创建您的项目。
其次,如果您想进行单件商品销售,请从您的应用中使用基于 URL API 的调用。 (这是我想做的)
我的做法是将 javascript 附加到执行以下操作的按钮点击:
function PayPalPaymentEvent(eventid) {
var URL = 'https://www.paypal.com/cgi-bin/webscr?';
var cmd = '_xclick';
var business = Your Business Email;
var currency_code = 'AUD';
var amount = 100;
var item_name = Name Of Your Item;
var item_number = Some Identifier;
var returnurl = 'http://somepage?info=success';
var cancel_return = 'http://somepage?info=failed';
var notify_url = 'http://WebFacingSite/API/PayPalReg';
var tax = (amount * 0.10);
var fullURL = URL + 'cmd=' + cmd + '&business=' + business + '¤cy_code=' + currency_code + '&amount=' + amount + '&tax=' + tax + '&item_name=' + item_name + '&item_number=' + item_number + '&return=' + returnurl + '&cancel_return=' + cancel_return + '¬ify_url=' + notify_url;
///// this ajax bit I use to record the transaction has started
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/API/PaymentStarted?eventid=' + eventid + '&UserID=' + UserID + '&paymentID' + paymentID,
error: function () {
SetMessage('error', 'Something has gone horribly, horribly wrong')
},
success: function (data) {
window.location.href = fullURL;
},
type: 'POST'
});
}
完成此操作后,您需要在您的 paypal 帐户中设置 IPN URL
您的帐户必须是企业帐户,转到您的个人资料,点击卖家工具,您将看到 IPN 设置。
在那里添加你的 web 面向 URL 没有端口(本地主机将无法工作,除非你使用类似 ngrok 的东西)
构建您的 Item_code 权利在这里变得很重要。 IPN 会将变量列表发送回您公开的 API,然后您可以进行一些匹配等。
这不适合您,但这就是我捕获该消息并处理它的方式。我的场景是我有一个用户注册了一个事件:
[HttpPost]
[Route("API/PayPalReg")]
public JsonResult ReceiveInput(string txn_id, string payment_date,
string payer_email, string payment_status,
string first_name, string last_name,
string item_number, string item_name,
string payer_id, string verify_sign)
{
var paypaltypes = item_name.Split('-');
var result = item_number.Split('-');
var userid = int.Parse(result[1]);
var TransPaymentString = result[1].ToString() + result[0].ToString();
var TransPayment = int.Parse(TransPaymentString);
var user = _context.Person.Include(p => p.Payments).Where(p => p.UserID == userid).Single();
var payment = user.Payments.Where(p => p.TransPaymentID == TransPayment).Single();
if (paypaltypes[0] == "Event")
{
var eventid = int.Parse(result[0]);
payment.PaymentReceipt = txn_id;
payment.PaymentReceived = true;
payment.PaymentReceivedDate = DateTime.Now;
payment.PaymentNotes = payer_email + " " + first_name + " " + last_name + " " + item_number + " " + payer_id + " " + verify_sign + " " + item_name;
_context.Payments.Update(payment);
_context.SaveChanges();
var userevent = _context.Person.Include(p => p.EventRegistry).Where(p => p.UserID == userid).Single();
var eventreg = userevent.EventRegistry.Where(er => er.EventID == eventid).Single();
eventreg.EventPaid = true;
_context.EventRegistry.Update(eventreg);
_context.SaveChanges();
Response.StatusCode = (int)HttpStatusCode.OK;
return Json("Json Result");
}
希望对您有所帮助
卡兹
所以也许,当我发布这个并且你已经解决了那个问题时为时已晚,但这是为了方便将来可能需要这个的任何人。
据我们所知,PayPal 早些时候没有提供任何 nuget 包来支持 .Net Core 中的 PayPal 支付。
但是为了结束这种痛苦,它终于提出了一个解决方案——通过购买 BrainTreepayments.com 来提供更好的开发支持。
这里有一个link供参考。
如果有人发现这个问题,我会post更新。
截至目前,还没有正式发布用于 Paypal 的 .net 核心 sdk,但是 github 自从提出这个问题以来已经取得了很大进展。
开发人员目前已经发布了 SDK 的官方测试版,可在此处进行分叉或下载:
https://github.com/paypal/PayPal-NET-SDK/tree/2.0-beta
如果您之前使用的是他们 sdk 的第一个版本,他们甚至还有迁移指南。
发布new version of SDK (2.0) 后暂时处于候选发布状态,PayPal SDK 将支持ASP.NET Core。
在 ASP.NET Core
上 link:
上有一个可用于 PayPal 的 Nuget 包
https://www.nuget.org/packages/PayPal.SDK.NETCore/
该包公开了与经典 .NET 相同的 API。
但是请注意,这不是来自 PayPal 的官方 Nuget 包。
如何在 ASP.NET Core
应用程序中集成 PayPal API
?我尝试了各种库,但其中 none 与 ASP.NET Core
兼容...我该怎么做?
我遇到了同样的问题。我可能会选择没有 SDK 的 REST API 实现: https://developer.paypal.com/docs/api/
或者我刚找到那个存储库,它可能很有趣:)
https://github.com/geoperez/PayPalCore
它是当前.Net SDK 到.NETCore 的端口。我还没有检查代码,但如果它能工作,那将节省很多时间!
您也可以选择旧的 API 选项:
http://www.codeproject.com/Articles/42894/Introduction-to-PayPal-for-C-ASP-NET-developers
但由于它太旧了,我不推荐它,因为 PayPal 可能有一天会停止使用它。 但是您可以在那里找到更多信息:
我和你有同样的问题。 寻找了数周,发现没有办法让 SDK API 与 .Net Core
一起工作您有几个选择,首先使用 4.6 或其他版本重新创建您的项目。 其次,如果您想进行单件商品销售,请从您的应用中使用基于 URL API 的调用。 (这是我想做的)
我的做法是将 javascript 附加到执行以下操作的按钮点击:
function PayPalPaymentEvent(eventid) {
var URL = 'https://www.paypal.com/cgi-bin/webscr?';
var cmd = '_xclick';
var business = Your Business Email;
var currency_code = 'AUD';
var amount = 100;
var item_name = Name Of Your Item;
var item_number = Some Identifier;
var returnurl = 'http://somepage?info=success';
var cancel_return = 'http://somepage?info=failed';
var notify_url = 'http://WebFacingSite/API/PayPalReg';
var tax = (amount * 0.10);
var fullURL = URL + 'cmd=' + cmd + '&business=' + business + '¤cy_code=' + currency_code + '&amount=' + amount + '&tax=' + tax + '&item_name=' + item_name + '&item_number=' + item_number + '&return=' + returnurl + '&cancel_return=' + cancel_return + '¬ify_url=' + notify_url;
///// this ajax bit I use to record the transaction has started
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/API/PaymentStarted?eventid=' + eventid + '&UserID=' + UserID + '&paymentID' + paymentID,
error: function () {
SetMessage('error', 'Something has gone horribly, horribly wrong')
},
success: function (data) {
window.location.href = fullURL;
},
type: 'POST'
});
}
完成此操作后,您需要在您的 paypal 帐户中设置 IPN URL 您的帐户必须是企业帐户,转到您的个人资料,点击卖家工具,您将看到 IPN 设置。 在那里添加你的 web 面向 URL 没有端口(本地主机将无法工作,除非你使用类似 ngrok 的东西)
构建您的 Item_code 权利在这里变得很重要。 IPN 会将变量列表发送回您公开的 API,然后您可以进行一些匹配等。 这不适合您,但这就是我捕获该消息并处理它的方式。我的场景是我有一个用户注册了一个事件:
[HttpPost]
[Route("API/PayPalReg")]
public JsonResult ReceiveInput(string txn_id, string payment_date,
string payer_email, string payment_status,
string first_name, string last_name,
string item_number, string item_name,
string payer_id, string verify_sign)
{
var paypaltypes = item_name.Split('-');
var result = item_number.Split('-');
var userid = int.Parse(result[1]);
var TransPaymentString = result[1].ToString() + result[0].ToString();
var TransPayment = int.Parse(TransPaymentString);
var user = _context.Person.Include(p => p.Payments).Where(p => p.UserID == userid).Single();
var payment = user.Payments.Where(p => p.TransPaymentID == TransPayment).Single();
if (paypaltypes[0] == "Event")
{
var eventid = int.Parse(result[0]);
payment.PaymentReceipt = txn_id;
payment.PaymentReceived = true;
payment.PaymentReceivedDate = DateTime.Now;
payment.PaymentNotes = payer_email + " " + first_name + " " + last_name + " " + item_number + " " + payer_id + " " + verify_sign + " " + item_name;
_context.Payments.Update(payment);
_context.SaveChanges();
var userevent = _context.Person.Include(p => p.EventRegistry).Where(p => p.UserID == userid).Single();
var eventreg = userevent.EventRegistry.Where(er => er.EventID == eventid).Single();
eventreg.EventPaid = true;
_context.EventRegistry.Update(eventreg);
_context.SaveChanges();
Response.StatusCode = (int)HttpStatusCode.OK;
return Json("Json Result");
}
希望对您有所帮助
卡兹
所以也许,当我发布这个并且你已经解决了那个问题时为时已晚,但这是为了方便将来可能需要这个的任何人。
据我们所知,PayPal 早些时候没有提供任何 nuget 包来支持 .Net Core 中的 PayPal 支付。 但是为了结束这种痛苦,它终于提出了一个解决方案——通过购买 BrainTreepayments.com 来提供更好的开发支持。
这里有一个link供参考。
如果有人发现这个问题,我会post更新。
截至目前,还没有正式发布用于 Paypal 的 .net 核心 sdk,但是 github 自从提出这个问题以来已经取得了很大进展。
开发人员目前已经发布了 SDK 的官方测试版,可在此处进行分叉或下载: https://github.com/paypal/PayPal-NET-SDK/tree/2.0-beta
如果您之前使用的是他们 sdk 的第一个版本,他们甚至还有迁移指南。
发布new version of SDK (2.0) 后暂时处于候选发布状态,PayPal SDK 将支持ASP.NET Core。
在 ASP.NET Core
上 link:
https://www.nuget.org/packages/PayPal.SDK.NETCore/
该包公开了与经典 .NET 相同的 API。
但是请注意,这不是来自 PayPal 的官方 Nuget 包。