- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试让 PayPal 的 ExpressCheckout 与定期付款一起使用。我已经完成了前两个阶段(调用 SetExpressCheckout 和 GetExpressCheckoutDetails)但是 CreateRecurringPaymentsProfile 失败并出现以下错误。我使用的是 Paypal 示例代码的修改版本,但我怀疑我(不是)设置编码器值。以前有人用过这个吗?
错误:
// TIMESTAMP: 2010-10-27T09:57:47Z
// CORRELATIONID: ad2b2da33c672
// ACK: Failure
// VERSION: 51.0
// BUILD: 1553277
// L_ERRORCODE0: 11502
// L_SHORTMESSAGE0: Invalid Token
// L_LONGMESSAGE0: The token is invalid
// L_SEVERITYCODE0: Error
我使用的代码是:
/// This returns true
public bool SetExpressCheckout(string amt, ref string token, ref string retMsg)
{
string host = "www.paypal.com";
if (bSandbox) {
pendpointurl = "https://api-3t.sandbox.paypal.com/nvp";
host = "www.sandbox.paypal.com";
}
string baseUrl = "http://" + HttpContext.Current.Request.Url.Authority;
string[] returnUrlParts = WebConfigurationManager.AppSettings["PaypalReturnUrl"].Split('?'),
cancelUrlParts = WebConfigurationManager.AppSettings["PaypalCancelUrl"].Split('?');
string returnURL = baseUrl + VirtualPathUtility.ToAbsolute(returnUrlParts[0]) + (returnUrlParts.Length > 1 ? '?' + returnUrlParts.Skip(1).Aggregate((itms, itm) => itms + itm) : string.Empty),
cancelURL = baseUrl + VirtualPathUtility.ToAbsolute(cancelUrlParts[0]) + (cancelUrlParts.Length > 1 ? '?' + cancelUrlParts.Skip(1).Aggregate((itms, itm) => itms + itm) : string.Empty);
NVPCodec encoder = new NVPCodec();
encoder["METHOD"] = "SetExpressCheckout";
encoder["RETURNURL"] = returnURL;
encoder["CANCELURL"] = cancelURL;
encoder["AMT"] = amt;
//encoder["PAYMENTACTION"] = "SALE";
encoder["CURRENCYCODE"] = "GBP";
encoder["NOSHIPPING"] = "1";
encoder["L_BILLINGTYPE0"] = "RecurringPayments";
encoder["L_BILLINGAGREEMENTDESCRIPTION0"] = "Subscription for MySite";
string pStrrequestforNvp = encoder.Encode();
string pStresponsenvp = HttpCall(pStrrequestforNvp);
NVPCodec decoder = new NVPCodec();
decoder.Decode(pStresponsenvp);
string strAck = decoder["ACK"].ToLower();
if (strAck != null && (strAck == "success" || strAck == "successwithwarning")) {
token = decoder["TOKEN"];
string ECURL = "https://" + host + "/cgi-bin/webscr?cmd=_express-checkout" + "&token=" + token;
retMsg = ECURL;
return true;
} else {
retMsg = "ErrorCode=" + decoder["L_ERRORCODE0"] + "&" +
"Desc=" + decoder["L_SHORTMESSAGE0"] + "&" +
"Desc2=" + decoder["L_LONGMESSAGE0"];
return false;
}
}
/// This returns true
public bool GetExpressCheckoutDetails(string token, ref string PayerId, ref string retMsg)
{
if (bSandbox) {
pendpointurl = "https://api-3t.sandbox.paypal.com/nvp";
}
NVPCodec encoder = new NVPCodec();
encoder["METHOD"] = "GetExpressCheckoutDetails";
encoder["TOKEN"] = token;
string pStrrequestforNvp = encoder.Encode();
string pStresponsenvp = HttpCall(pStrrequestforNvp);
NVPCodec decoder = new NVPCodec();
decoder.Decode(pStresponsenvp);
string strAck = decoder["ACK"].ToLower();
if (strAck != null && (strAck == "success" || strAck == "successwithwarning")) {
return true;
} else {
retMsg = "ErrorCode=" + decoder["L_ERRORCODE0"] + "&" +
"Desc=" + decoder["L_SHORTMESSAGE0"] + "&" +
"Desc2=" + decoder["L_LONGMESSAGE0"];
return false;
}
}
// This fails and returns false with the following in the decoder result
// TIMESTAMP: 2010-10-27T09:57:47Z
// CORRELATIONID: ad2b2da33c672
// ACK: Failure
// VERSION: 51.0
// BUILD: 1553277
// L_ERRORCODE0: 11502
// L_SHORTMESSAGE0: Invalid Token
// L_LONGMESSAGE0: The token is invalid
// L_SEVERITYCODE0: Error
public bool CreateRecurringPaymentsProfileCode(string token, string amount, string profileDate, string billingPeriod, string billingFrequency, ref string retMsg)
{
NVPCallerServices caller = new NVPCallerServices();
IAPIProfile profile = ProfileFactory.createSignatureAPIProfile();
profile.APIUsername = this.APIUsername;
profile.APIPassword = this.APIPassword;
profile.APISignature = this.APISignature;
profile.Environment = "sandbox";
caller.APIProfile = profile;
string host = "www.paypal.com";
if (bSandbox) {
pendpointurl = "https://api-3t.sandbox.paypal.com/nvp";
host = "www.sandbox.paypal.com";
}
NVPCodec encoder = new NVPCodec();
encoder["VERSION"] = "51.0";
// Add request-specific fields to the request.
encoder["METHOD"] = "CreateRecurringPaymentsProfile";
encoder["TOKEN"] = token;
encoder["AMT"] = amount;
encoder["PROFILESTARTDATE"] = profileDate; //Date format from server expects Ex: 2006-9-6T0:0:0
encoder["BILLINGPERIOD"] = billingPeriod;
encoder["BILLINGFREQUENCY"] = billingFrequency;
encoder["L_BILLINGTYPE0"] = "RecurringPayments";
encoder["DESC"] = "Subscription for MySite";
// Execute the API operation and obtain the response.
string pStrrequestforNvp = encoder.Encode();
string pStresponsenvp = caller.Call(pStrrequestforNvp);
NVPCodec decoder = new NVPCodec();
decoder.Decode(pStresponsenvp);
//return decoder["ACK"];
string strAck = decoder["ACK"];
bool success = false;
if (strAck != null && (strAck == "Success" || strAck == "SuccessWithWarning")) {
success = true; // check decoder["result"]
} else {
success = false;
}
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < decoder.Keys.Count; i++) {
buffer.AppendFormat("{0}: {1}", decoder.Keys[i], decoder.GetValues(i).Aggregate((vals, val) => vals + "----" + val));
}
retMsg = buffer.ToString();
return success;// returns false
}
如果有帮助,调用它的代码是:
NVPAPICaller ppapi = new NVPAPICaller();
NVPCodec decoder = new NVPCodec();
string retMsg = string.Empty,
token = Convert.ToString(Session["token"]),
finalPaymentAmount = "15",
payerId = Convert.ToString(Session["payerId"] ?? string.Empty); // set from SetExpressCheckout
bool shippingSuccess = ppapi.GetExpressCheckoutDetails(token, ref payerId, ref retMsg);
if (shippingSuccess) {
payerId = Session["payerId"].ToString();
btnConfirm.Enabled = false;
bool paymentSuccess = ppapi.CreateRecurringPaymentsProfileCode(token, finalPaymentAmount, DateTime.Now.ToString("yyyy-M-DTH:m:s"), "Year", "1", ref retMsg);
// but paymentSuccess is false
最佳答案
这实际上是最后的日期,但我花了很长时间才注意到。在对 CreateRecurringPaymentsProfile 的调用中,encoder["PROFILESTARTDATE"] = profileDate;
是错误的。当我需要 yyyy-MM-ddTHH:mm:ss(小写的 d)时,我使用了
yyyy-MM-DDTHH:mm:ss
格式。
关于c# - PayPal - ExpressCheckout 和定期付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4032206/
在旧式 html 表单付款创建中,有一个名为 custom 的额外字段,我可以用它来识别 Paypal 回调后的付款。在 Rest API 中,当我在 Express Checkout 中创建付款时,
前段时间,我为一个主要销售数字商品的简单网站开发了一个自定义购物车。我在上面集成了ExpressCheckout,在DoExpressCheckout操作之后,如果响应包含ACK等于Success或者
我发现使用带折扣的 Paypal ExpressCheckout 有线问题: 我传递了 2 个项目,例如: L_NAME0 : "test2", L_AMT0: 2, // 2 EUR L_QTY0:
我开发了一个 Web 应用程序,它通过 ExpressCheckout API 接受付款,供用户成为成员(member)。一切正常。 我现在想扩展我的 Web 应用程序服务,并为我的用户提供购买第三方
我正在尝试让 PayPal 的 ExpressCheckout 与定期付款一起使用。我已经完成了前两个阶段(调用 SetExpressCheckout 和 GetExpressCheckoutDeta
过去,可以通过将 LANDINGPAGE 参数(连同 SOLUTIONTYPE 设置为“Sole”)作为 SetExpressCheckout 请求的一部分传递来指定用户将体验的快速结账流程(登录或
我一直在尝试设置具有定期付款的 ExpressCheckout,但我没有找到解决方案。 查看文档 ( Recurring Payments With the Express Checkout API
我被要求将一个使用 ExpressCheckout 的美国站点扩展到英国。使用的 API 有什么不同吗? 我查看了 PayPal 开发者网站,我可以看到网站支付专业版有一个不同的英国 API - ht
我是 PayPal SDK 的新手,必须集成支付网关;我使用 PHP,阅读 GitHub 上关于 PayPal PHP SDK 的文档说不推荐使用 Merchant SDK,以便使用新的 Rest A
商家/卖家 paypal 有很多交易进来,我想在交易中放置一条注释/消息或一些代码,告诉卖家这笔交易来自哪个网站。 这可能吗? 请指教,谢谢! 最佳答案 可以传递一个名为 custom 的字段,它可以
我使用快速结帐 API 并且付款有效,但在卖家账户历史记录中我不知道我卖了什么,商品 1、商品 2 等...没有出现在销售详情中。 抱歉,它是法语的,但对于理解来说并不重要 在付款详情中,我想看看我卖
我正在为爱尔兰说英语、拉脱维亚语和俄语的客户开发一个多语言在线商店。 PayPal 支持英语和俄语(以及其他语言),但不支持拉脱维亚语。 我想将我的表格发送到 PayPal,将其设置为默认以英语显示,
在 SetExpressCheckout 中,我设置了以下值 'PAYMENTREQUEST_0_ALLOWEDPAYMENTMETHOD' => 'InstantPaymentOnly', 'PAY
我已经集成了一个简单的在线表单,它需要用户输入一些内容,并且在隐藏字段中包含商品和定价信息。在用户验证他的输入后,他点击按钮使用 PayPal 付款,然后将被重定向到 PP,他可以在那里立即付款。 P
我正在使用 PayPal IPN Listener几个月来一直很好用的类,但最近(没有任何代码更改)我收到了一个奇怪的问题。 验证即时支付通知的以下代码抛出异常:无效响应状态:403 $listene
我正在查看 PayPal 提供的各种集成,因为我只想提供 PayPal 作为付款选项,所以我将使用 Express Checkout。话虽这么说,但似乎可以通过多种方式进行集成: 名称值对 经典 AP
客户提示他得到: [ACK] => 失败 [VERSION] => 89.0 [BUILD] => 5551055 [L_ERRORCODE0] => 10401 [L_ERRORCODE1] =>
我正在创建一个网站,您必须每月支付 1 美元才能使用一个帐户。好的,它可以工作,但是使用它的人可以访问 paypal 网站并取消经常性付款,但仍然可以使用该帐户。我该如何解决?我使用的代码:https
我的调用流程如下: 设置快速结账 GetExpressCheckout DoExpressCheckout 注意:paymentAction 对于单次支付是 Sale,对于循环支付是 Authoriz
我们使用 PayPal REST API 处理用户交易和定期付款。几周后我们将上线,我需要的最后一条信息是 SSL 证书。我们是否需要在我们的网站上安装 SSL 证书才能正常进行 PayPal 集成?
我是一名优秀的程序员,十分优秀!