PayPal 是不是包含不需要向用户显示 PayPal 的支付集成选项?
Posted
技术标签:
【中文标题】PayPal 是不是包含不需要向用户显示 PayPal 的支付集成选项?【英文标题】:Does PayPal include payment integration options that do not require showing PayPal to the user?PayPal 是否包含不需要向用户显示 PayPal 的支付集成选项? 【发布时间】:2010-12-29 07:30:47 【问题描述】:我们正在寻求替换我们对 Authorize.net 的使用。我花了很多时间查看 PayPal 文档,但找不到我的问题的明确答案:
使用 thousands 数十种不同的 PayPal API,我们可以在我们的网站上建立一个结帐流程,我们可以在其中捕获和处理来自客户的信用卡信息,而无需客户离开我们的网站,客户无需查看任何与 PayPal 相关的内容(因此 PayPal 是 100% 不可见的)。
我对@987654321@ 感到困惑: “请注意:Direct Payment API 不是独立产品。作为 Website Payments Pro 解决方案的一部分,您需要同时使用 Direct Payment API 和 Express Checkout。”因为 Express Checkout 要求您显示 PayPal 徽标等。
this page 非常清楚地表明,您必须提供品牌的 Express 结帐选项才能使用 Direct Payments API。
我想我只是想确认一下 SO 上有人以这种方式使用 PayPal,并且在保持 PayPal 对客户 100% 不可见时没有遇到问题?
【问题讨论】:
【参考方案1】:是的,您可以.. 我们在我们的网站上使用 PayPal,PerqWorks,并且只允许使用信用卡付款。 PayPal 产品是 Website Payments Pro。我做了集成,这很容易,而且如果您的销售额每月低于 1 万美元,成本也很低..
编辑:: 我需要澄清这一点——我们从 PayPal 收到了一个例外,允许我们在我们的网站上没有 PayPal 按钮。我错过了这个信息,因为我办公室的其他人实际上做了这个安排。我的建议是你问问你的 PayPal 集成账户的人,他们为我们做了例外..
【讨论】:
这个页面告诉我,你必须用 Express checkout 的东西显示 PayPal 品牌:paypal.com/us/cgi-bin/webscr?cmd=_wp-pro-feature-list -- ? 我同意,但我们询问了指定的 PayPal 客户代表,他澄清说不同意。如果您访问 Perq 网站,您会看到我们有一个没有 PayPal 标记的付款表单。 有趣,Paypal 不清楚。此页面明确指出“如果您使用 Website Payments Pro,则必须同时实现直接付款和快速结帐。”:cms.paypal.com/us/cgi-bin/…【参考方案2】:我所知道的完全集成并将 PayPal 品牌排除在流程之外的唯一方法是使用他们的 Payflow Pro 网关服务。我以前用过它,它与处理任何其他支付网关(例如 Authorize.net)非常相似。
不过,这完全取决于您,但我发现仍有一些人更喜欢使用他们的 PayPal 帐户。他们可能担心小型或未知电子商务网站可能缺乏安全性。或者他们可能是从另一个国家订购的,在这种情况下,PayPal 帐户提供了丰富的资金选择和自动货币转换。因此,最好至少提供 PayPal 标准结账流程或类似的选项。
【讨论】:
【参考方案3】:我不能给你一个明确的否定,但我相当肯定 PayPal 不会允许这样做。他们依赖于使用买家的 PayPal 余额或银行账户支付某些东西并向商家收取一定百分比的收入。商家的百分比仅用于支付信用卡发卡机构的费用。
如果没有在您的网站上输入用户的 PayPal 凭据,他们就不可能使用信用卡以外的资金来源。这样做的问题是,如果用户习惯于在非 PayPal 网站上输入他们的 PayPal 登录信息,则会造成网络钓鱼攻击的巨大漏洞。
此时您基本上是在谈论标准的信用卡商家帐户。
【讨论】:
【参考方案4】:您绝对可以将 Paypal 用作独立的信用卡处理工具。必须为 paypal pro 设置 paypal 帐户。
您可以从 paypal 开发网站下载 API DLL。
paypal_base.dll
log4net.dll
这是一个关于如何将它用于 VB.NET 的示例函数,但您可以相对容易地转换为 C#:
Imports com.paypal.sdk.services
Imports com.paypal.soap.api
Imports com.paypal.sdk.profiles
Private Function processCC() As Boolean
Dim caller As New CallerServices
Dim profile As IAPIProfile = ProfileFactory.createSignatureAPIProfile
profile.APIUsername = AppSettings("APIUsername")
profile.APIPassword = AppSettings("APIPassword")
profile.APISignature = AppSettings("APISignature")
profile.Environment = AppSettings("Environment")
caller.APIProfile = profile
Dim pp_Request As New DoDirectPaymentRequestType
pp_Request.Version = "51.0"
pp_Request.DoDirectPaymentRequestDetails = New DoDirectPaymentRequestDetailsType
pp_Request.DoDirectPaymentRequestDetails.IPAddress = Request.ServerVariables("REMOTE_ADDR")
pp_Request.DoDirectPaymentRequestDetails.MerchantSessionId = Session.SessionID
pp_Request.DoDirectPaymentRequestDetails.PaymentAction = PaymentActionCodeType.Sale
pp_Request.DoDirectPaymentRequestDetails.CreditCard = New CreditCardDetailsType
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CreditCardNumber = Request("ccNumber")
Select Case Request("ccType")
Case "visa"
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.Visa
Case "mastercard"
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.MasterCard
Case "amex"
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.Amex
Case "discover"
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.Discover
End Select
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CVV2 = Request("CVV2")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.ExpMonth = Request("expMonth")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.ExpMonthSpecified = True
pp_Request.DoDirectPaymentRequestDetails.CreditCard.ExpYear = Request("expYear")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.ExpYearSpecified = True
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner = New PayerInfoType
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Payer = Request("email")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerID = ""
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerStatus = PayPalUserStatusCodeType.unverified
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerCountry = CountryCodeType.US
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address = New AddressType()
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Street1 = Request("address1")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Street2 = Request("address2")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.CityName = Request("city")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.StateOrProvince = Request("state")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.PostalCode = Request("zipcode")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.CountryName = "USA"
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Country = CountryCodeType.US
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.CountrySpecified = True
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName = New PersonNameType()
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName.FirstName = Request("firstname")
pp_Request.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName.LastName = Request("lastname")
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails = New PaymentDetailsType()
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal = New BasicAmountType()
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.currencyID = CurrencyCodeType.USD
Dim myOrder As Order = CType(Session("currentOrder"), Order)
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.Value = FormatNumber(myOrder.grandTotal, 2)
'pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.ShippingTotal = New BasicAmountType()
'pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.ShippingTotal.currencyID = CurrencyCodeType.USD
'pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.ShippingTotal.Value = FormatNumber(myOrder.orderShippingTotal, 2)
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.ItemTotal = New BasicAmountType()
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.ItemTotal.currencyID = CurrencyCodeType.USD
pp_Request.DoDirectPaymentRequestDetails.PaymentDetails.ItemTotal.Value = FormatNumber(myOrder.orderSubTotal, 2)
'// Execute the API operation and obtain the response.
Dim pp_response As New DoDirectPaymentResponseType()
pp_response = CType(caller.Call("DoDirectPayment", pp_Request), DoDirectPaymentResponseType)
Session("myResponse") = pp_response
Dim rtn As Boolean = False
Select Case pp_response.Ack
Case AckCodeType.Failure
rtn = False
Case AckCodeType.FailureWithWarning
rtn = False
Case AckCodeType.Success
Return True
Case AckCodeType.SuccessWithWarning
rtn = True
Case AckCodeType.Warning
rtn = False
End Select
Return rtn
End Function
【讨论】:
此页面向我显示,您必须在 Express Checkout 中显示 PayPal 品牌:paypal.com/us/cgi-bin/webscr?cmd=_wp-pro-feature-list -- ?【参考方案5】:有一次,我为此目的使用了 Paypal Pro。在查看您的链接时,他们似乎确实要求您同时使用贝宝结帐和常规结帐。 但是,您仍然可以实现您的目的。发生的情况是,他们可以通过贝宝结帐,但对它一无所知,或者他们可以单击贝宝按钮并离开您的网站。付款后,您可以将“谢谢”返回页面设置回您的网站。 除此之外,您必须让他们批准例外。
【讨论】:
【参考方案6】:我不能告诉你有关 Paypal 的 API,但我内心有一些东西正在燃烧,阅读你的主题。
对于作为用户的我来说,仅仅看到一个声称我的付款数据的随机网站形式是非常难看的。提示我的数据实际去向要好得多,但只有当网站将我发送到贝宝时,我才可以让我的支付数据,通知我有关贝宝的信息,验证我正在发送我的数据到贝宝等。
如果您在幕后进行所有操作,这是您从客户那里获得的一种安全保障 - 即使您写信给他们,他们的付款数据仅由 paypal 处理,他们没有透明的方式来检查这一点。
在实施一些晦涩难懂的东西之前,我会借此机会在您的客户下进行民意调查,了解他们更喜欢什么。
【讨论】:
虽然我明白你的意思,但不同的品牌可能会被认为是不专业的,这是预算执行的结果,而不是良心决定让用户了解情况。 有些支付 API 不需要托管页面,但允许客户验证其支付数据传输。 Braintree 的透明重定向 API 就是其中之一:bit.ly/braintree-api。商家构建了一个直接提交到 Braintree 的表单,因此如果他们的客户担心,他们可以验证该表单是否已提交到 Braintree URL。 Braintree 只是重定向回商家网站,因此如果您不寻找它,Braintree 就不是很明显。披露:我为 Braintree 工作。以上是关于PayPal 是不是包含不需要向用户显示 PayPal 的支付集成选项?的主要内容,如果未能解决你的问题,请参考以下文章
PayPal REST API 未返回 payment_info