【问题标题】:Validate paypal pay id passed by Android in Magento site验证 Android 在 Magento 站点中传递的 paypal 支付 ID
【发布时间】:2016-09-14 21:51:55
【问题描述】:

我们正在为我们的 Magento 1.9 网站制作 Android 应用。在我们的网站上,我们已经成功集成了 Paypal。

在应用程序中,客户可以进行支付,并且使用 Paypal SDK,我们在应用程序中获取交易 ID。 Android 团队会将交易 ID 传递给 Magento,在 Magento 中我们需要验证付款。

我们的 Android 团队需要 Magento 方面的 API。

我们怎样才能做到这一点?


订单完成后,我们将从paypal sdk 获取交易ID

请访问github link并搜索“验证服务器”(使用CTRL+F)。

在链接中,他们提到我们必须与服务器验证,那么通过应用程序完成付款后如何与服务器验证?


Paypal 团队向我们发送了一个请求样本:

$apiContext = new ApiContext(new OAuthTokenCredential(
        "<CLIENT_ID>", "<CLIENT_SECRET>"));

$payment = Payment::get('PAY-5YK922393D847794YKER7MUI', $apiContext);

他们说我们必须使用上面的示例代码向 PayPal 发送请求。

一旦我们通过pay id,PayPal 将回复完整的付款详情。

如何在我们的网站中使用上述代码?

Paypal 团队给了我们这个github code

他们说我必须使用整个 SDK 来获取付款详细信息。如何在 Magento 中使用它?

【问题讨论】:

  • “在 magento 中我们需要验证它”是什么意思?您希望 Android 应用程序将交易 ID 发送到 magento,然后 magento 从 PayPal 中提取交易详细信息并在 magento 中记录付款?
  • @BorisSavic 你是对的。
  • @BorisSavic 请检查更新的问题。
  • 这里是 PayPal PHP SDK:github.com/paypal/PayPal-PHP-SDK,如果单击 PHP,则在此页面右侧,您可以通过 composer developer.paypal.com/docs/api查看如何使用它
  • 这里我有解决方案enter link description here

标签: php android magento paypal


【解决方案1】:

以下解释基于这样的用例,即您在 Magento 网上商店中启用了 PayPal(Express Checkout 或 Payment Pro),但还在您的客户端 APP 中集成了 Mobile Native SDK(而不是使用现有的 Magento PayPal 流,嵌入到您 APP 中的 web 视图中)。

  1. 验证付款(在您的客户端 APP 在响应中收到 payment-id 之后)对于防止欺诈非常重要。移动 APP 与 PayPal 服务器独立交互,您不希望在没有服务器(您的 Magento 服务器)验证实际支付内容的情况下根据移动 API 响应(易于复制)交付商品/服务。

  2. 显然 Magento 没有在 PayPal 模块中提供这部分代码,您需要自己实现,但您不一定必须导入整个 RESTful SDK 只是为了单一的支付外观 -向上 API 调用。 一切都基于 JSON 请求和 JSON 解析,只要您遵循 PayPal RESTful 有效负载方案HERE,并使用curl 语句发起请求,它就可以工作。

  3. 您的服务器获取详细信息后的付款清单也可以找到HERE

服务器端实现的其他最佳实践:

  • 存储支付 ID,例如id": "PAY-564191241M8701234KL57LXI" 在您的数据库中以及订单数据输入;
  • 将来自验证(付款查找)API 响应的debug-id 存储在error 对象(如果有错误响应)中,并存储到您的数据库中,以便通过PayPal 支持进一步排除故障。

curl 命令的示例 API 测试如下:

步骤#1 - 获取访问令牌以进行身份​​验证

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
  -H "Accept: application/json" \
  -H "Accept-Language: en_US" \
  -u "<your sandbox APP client>:<your sandbox APP secret>" \
  -d "grant_type=client_credentials"

解析示例响应并获取访问令牌:

{
  "scope": "https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/vault/credit-card/.*",
  "access_token": "<Your-Access-Token-for-further-calls>",
  "token_type": "Bearer",
  "app_id": "APP-6XR95014SS315863X",
  "expires_in": 28800
}

第 2 步 - 使用访问令牌和付款 ID(由您的 APP 返回,例如 PAY-123456789)进行查找调用

curl https://api.sandbox.paypal.com/v1/payments/payment/PAY-123456789 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <the access token from Step#1>"

您将收到与此类似的响应,其中包含您将与数据库中的订单信息进行比较和验证的付款详细信息

{
  "proof_of_payment": {
    "adaptive_payment": {
      "pay_key": "AP-70M68096ML426802W",
      "payment_exec_status": "COMPLETED",
      "timestamp": "2013-02-20T00:26:25Z",
      "app_id": "APP-91B933855X481767M"
    }
  },
  "payment": {
    "short_description": "Hipster t-shirt",
    "amount": "9.95",
    "currency_code": "USD"
  },
  "client": {
    "platform": "iOS",
    "paypal_sdk_version": "1.0.0",
    "environment": "live",
    "product_name": "PayPal iOS SDK"
  }
}

【讨论】:

  • thnaks 很多,我会检查并告诉你,请到这里,如果我有任何疑问,我会问你。
  • 如链接中所述,我是否需要在服务器中运行此命令:`curl -v -X GET api.sandbox.paypal.com/v1/payments/…`
  • payload格式不正确,去掉所有的字符串查询,只添加带有这个url的PAY-ID请求:api.sandbox.paypal.com/v1/payments/payment/…;其次,您需要添加您的 accessToken 与 -H "Content-Type: application/json" \ -H "Authorization: Bearer accessToken"...
  • 您可以先在这里查看并熟悉 REST API 调用:developer.paypal.com/docs/api/overview
  • 我们如何获得payid?如果 payid 是:100,请给出我需要运行的命令。
【解决方案2】:

更新:

这里是PayPal docs,告诉你应该如何做到这一点。

要验证付款,请回答以下问题:

  • 付款证明是否真实?
  • 我是收款人吗?
  • 金额和币种是否正确?
  • 以前是否使用过付款?

可以使用 REST API 获取按付款 ID 的付款详情:

curl https://api.sandbox.paypal.com/v1/payments/payment/PAY-5YK922393D847794YKER7MUI \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer accessToken"

您说您已经将 Magento 网站与 PayPal 集成。这意味着您已启用 IPN 并正常工作。当来自 Android 应用的新付款发生时,IPN 应该会触发,并且您应该在 Magento 中记录该销售。

我不明白为什么要将交易数据从 Android 发送到 Magento?如果您想知道从 Android 获得了多少销售额,您可以使用 PayPal 提供的自定义字段。

【讨论】:

  • 是的,Magento 网站已与贝宝集成。与从 android 发生新付款相比,不需要验证 paypal 电子邮件 ID 和密码或来自 magento API 的其他一些验证?我们的安卓团队告诉它不可能检查用户输入正确的电子邮件 ID 的应用程序吗?所以要从 magento 方面验证这些东西,我需要编写一个 API 并提供给他们,使用他们将验证的 API。请指导我正确的方向。
  • 我认为您没有正确提出问题:) 我不清楚您要尝试做什么或验证您所说的内容。付款完成后,无论是 Android 还是 Web,都会触发 IPN,您可以在 Magento 中记录该销售。 “验证贝宝电子邮件和密码”对您来说是什么意思?你能再解释一下吗?您不需要用户的密码才能让他们向您付款。或者您是在谈论您网站上的帐户?
  • 你可能是对的。我对这些 api、事务 id、soap 和所有东西不太了解。验证是指客户输入的邮箱是否已经注册的邮箱,这类验证。意思是说一旦我们在magento中集成了paypal,如果andriod可以通过magento访问paypal,那么就不需要向magento发送任何类型的交易ID进行验证?他们说他们正在通过 paypal sdk 获取交易 ID。
  • 如果您已经注册并且用户需要在付款之前登录,您需要以某种方式知道您网站上的哪个用户付款,这通常是通过自定义字段完成的。在付款请求时设置自定义字段,例如数据库中的用户 ID,并且在 IPN 通话中,您有该自定义字段由 PayPal 发回,您可以将付款链接到您的用户。如果您只对由 PayPal 完成的 IPN 请求中也可用的 PayPal 电子邮件地址感兴趣。所以......我仍然没有看到任何理由将支付数据从 Android 发送到 Magento :)
  • 表示IPN已经内置了magento代码。无需将从 andriod 获得的任何交易 id 发送给 magento 客户可以通过应用程序付款。内置 IPN 只负责验证?
猜你喜欢
  • 2011-07-08
  • 2016-04-24
  • 2015-10-26
  • 2014-03-07
  • 2017-08-20
  • 2013-04-05
  • 2011-11-08
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多