- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
几年前我已经集成了 PayPal 支付标准来获取支付。
我的应用程序在 Asp.Net 中。目前处于沙盒模式。
我的网站上有一个“立即付款”按钮,其中包含指向 PayPal 网站的 PostBackURL 以及所有必需的参数。当用户点击按钮时,它会重定向到 PayPal,他们的用户可以通过他的帐户或借记卡/信用卡付款。在成功的交易中,用户被发送回我的应用程序。当用户返回我的应用程序时,我会在 Request.Form 集合中获得各种参数,例如“payment_status”。我验证响应并相应地显示成功/失败消息。
当用户使用桌面浏览器时,上述流程运行良好。
但是当用户使用移动设备并使用移动浏览器时。用户登陆 PayPal 移动友好页面。用户用他的帐户付款。然后显示成功消息。但是当用户被重定向到我的应用程序时,我没有在 Request.Form 集合中获得任何值。因此,我无法验证来自 PayPal 的响应。
此外,我还了解到,在桌面浏览器上,PayPal 通过 POST 方法向我的网站返回响应,因此 Request.Form 包含数据。
而对于移动浏览器,PayPal 通过 GET 方法返回响应,因此 Request.Form 不包含任何数据。
为什么 PayPal 通过 GET 返回响应?在这种情况下,即使在 querystring 中也没有数据,那么我该如何验证响应,是否支付成功?
我已阅读文档,它说没有其他针对移动 PayPal 支付标准的特定设置。
我不想迁移到快速结帐或任何其他配置。
此外,我已经搜索了很多与 SO 相关的线程,但没有找到满足我需要的任何合适的解决方案,因此作为一个新问题提出。
最佳答案
我在我的 Web API Asp.NET 项目中为 PayPal 做了这样的工作..希望它对你有帮助:
[AllowAnonymous]
[HttpPost]
[Route("api/PayPal/IPN")]
[ResponseType(typeof(OrderPayPalDTO))]
public async Task<IHttpActionResult> PayPalIPN()
{
try
{
decimal tot;
var data = this.Request.Content.ReadAsStringAsync().Result;
if (data == null) return BadRequest();
// Parse the query string variables into a NameValueCollection.
NameValueCollection qscoll = HttpUtility.ParseQueryString(data);
PayPalViewModel payPalModel = new PayPalViewModel();
var payPal = payPalModel.ToPayPalVM(qscoll); //HRE IS A EXTENSION METHOD TO MAP to a CLASS
if (payPal == null) return InternalServerError(new Exception());
//Try cast total from paypal
if (!decimal.TryParse(payPal.mc_gross, out tot)) return InternalServerError(new Exception(Constant.Error.PAYMENT_ERROR_TOTAL_CAST));
// If status is Ok /or Completed
if (payPal.payment_status.Equals(Constant.PaymentStatus.PAYED) || payPal.payment_status.Equals(Constant.PaymentStatus.COMPLETED))
{
// update payment
bool ok = await this.UpdatePayment(order, user);
if (!ok) return InternalServerError(new Exception(Constant.Error.PAYMENT_ERROR_UPDATE));
}
return Ok(order);
}
catch (Exception ex)
{
_logger.LogException(ex);
return (Constant.CONFIGURATION_GLOBALS.IS_DEVELOPMENT_MODE)
? InternalServerError(ex)
: InternalServerError(new Exception(Constant.Error.ERROR_GENERIC_500));
}
}
还有我的映射器和类 PayPal ViewModel
public class PayPalViewModel
{
public string mc_gross { get; set; }
public string custom { get; set; }
public string payment_status { get; set; }
public string payment_type { get; set; }
public string mc_currency { get; set; }
public string payer_id { get; set; }
public DateTime payment_date { get; set; }
public string payment_gross { get; set; }
/// <summary>
/// ToPayPalVM From NameValueCollection
/// </summary>
/// <returns></returns>
public PayPalViewModel ToPayPalVM(NameValueCollection qscoll)
{
if (qscoll == null) return null;
DateTime date = DateTime.Now;
string mcGross = qscoll["mc_gross"];
string paymentType = qscoll["payment_type"];
string mcCurrency = qscoll["mc_currency"];
string paymentStatus = qscoll["payment_status"];
string payerId = qscoll["payer_id"];
string paymentDate = qscoll["payment_date"];
string paymentGross = qscoll["payment_gross"];
string cust = qscoll["custom"];
var datePay = DateTime.TryParse(paymentDate, out date);
return new PayPalViewModel
{
mc_gross = mcGross,
custom = cust,
payment_status = paymentStatus,
payment_type = paymentType,
mc_currency = mcCurrency,
payer_id = payerId,
payment_gross = paymentGross,
payment_date = (datePay) ? date : DateTime.Now
};
}
}
关于c# - PayPal 支付标准从移动设备返回 GET 而不是 POST,因此无法验证记录支付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41312414/
如果我的交易中的次要收款人没有 Paypal 帐户,会发生什么情况。他会收到要求他创建 Paypal 帐户的通知,还是 API 调用不会成功? 我几乎无法知道销售服务的用户在注册我的平台时是否有Pay
我们知道有这么多的支付网关服务提供商,即 Paypal ,moneybrookers,authorize.net以及许多国内和国际的支付网关提供商。现在,我的问题是,开发我们自己的支付网关服务以处理世
我们正在寻求替代我们对 Authorize.net 的使用。我花了很多时间查看 PayPal 文档,但找不到我的问题的明确答案: 使用 thousand 数十种不同的 PayPal API 可以在我们
我实际上是在为客户工作。我已经在网站上成功实现了 paypal pro,并且一切正常,我相信我遵循了他们的流程和指南,使它按照他们的意思工作。 因此,我一直在阅读 this webpage将网站投入生
我有2件商品要出售。我的运输底价为7.50美元,每增加一个项目,则为2.00美元 我已经设置了高级代码 运费= $ 7.50 运费2 = $ 2.00 一切正常,除非在购物车中添加了其他商品后,购物车
我想在不使用购物车的情况下实现一个不太复杂的解决方案。 我在自己对这个问题的回答中详细说明了解决方案,但如果有人能提出更好的方法,我会很高兴。 谢谢 最佳答案 实际上我最近不得不这样做。毫无疑问,我的
我创建了一个带有默认支付网关的shopify 小商店,即paypal express checkout。 当客户点击 Paypal 结帐按钮时,他们被要求输入他们的信用卡号并输入电子邮件并选择密码以注
一段时间以来,我一直在运行一个网站,该网站通过向 Paypal 网站发送一个 notify_url 来记录 Paypal 交易,并监听该 notify_url。我的监听页面解析从 paypal 发送的
我在网络应用程序中使用 PayPal Subscribe 按钮。我想将订阅开始日期传递给 PayPal,这不会总是今天的日期。 通常情况下,如果没有有效订阅,PayPal 会创建一个从今天开始的订阅。
大家好,我遇到了“立即购买”paypal 按钮这个令人沮丧的问题。 我希望我的客户能够通过 paypal 使用借记卡/信用卡付款,而无需创建 paypal 帐户,同时我希望能够根据产品类型将不同的定价
我想实现 paypal 授权并自动获取付款。我用过 Paypal 标准账户。我已发送带有授权参数的付款请求。
我想在我的 Paypal 沙盒账户中测试批量支付。根据 paypal 文档,它描述了将资金转移到 paypal 帐户的步骤。但我想转账到我客户的银行账户。我该怎么做? 仅供引用:PayPal 文档内容
我正在尝试登录我的沙盒帐户(使用 chrome),但由于 paypal 的新变化我不能。 Paypal 现在要求我登录开发者网站。我愿意。 然后我转到应用程序->沙盒帐户,然后按“sanbox 站点”
我有一个支持 Paypal 付款的 opencart 系统。是否有允许用户(信用卡)付款而无需强制注册 Paypal 帐户的选项。到目前为止,我使用的是 paypal 标准模块。 最佳答案 使用 Pa
我可以使用 Paypal ID 和密码使用 Paypal 详细信息进行付款而无需重定向到 Paypal 网站吗?我想在不离开我的网站的情况下完成所有付款流程。谢谢 最佳答案 您可以使用 PayFlow
当我尝试 https://fpdbs.paypal.com/dynamicimageweb?cmd=_dynamicimage 时,图像损坏了. 这是返回的错误信息: “尝试为应用程序构建 prote
我想向我的客户付款,为此我收到了他们的电子邮件,我想验证电子邮件地址是否存在于 paypal 中! 我搜索并找到了我尝试过的支付身份 API,但它只提供了我的我的数据!这是 LINK那个 API。 我
当从用户的 PayPal 账户中扣款时,PayPal 服务器在一定时间内没有响应(超时)。我们决定假设钱确实已经被拿走了,所以我们会退款。但是,如果钱没有从用户账户中扣除会怎样? PayPal返回什么
我有一个网站可以定期(比如每周一次)从客户那里收到钱。我将我的客户详细信息存储在我的数据库中,我想从我的客户帐户中提取资金,而不是每次都提示他们进行身份验证。金额会因客户而异。我怎样才能用 pay p
我有一个表格,其中一个团队签下他们的球员,然后被运送到 Paypal 进行注册付款,然后当一切都完成后我会收到一个 IPN。我正在做一个类似的表格,发现自从我创建该表格以来,Paypal 发生了很大变
我是一名优秀的程序员,十分优秀!