php - 验证 Android 在 Magento 站点中传递的 paypal pay id

标签 php android magento paypal

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

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

我们的 Android 团队需要 Magento 端的 API。

我们如何做到这一点?


我们正在从 paypal sdk 获取交易 ID订单完成后。

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

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


Paypal 团队向我们发送了请求 sample :

$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 网上商店中启用了 PayPal(Express Checkout 或 Payment Pro),并且还在您的客户端应用程序中集成了 Mobile Native SDK(而不是使用现有的 Magento PayPal 流程,嵌入到您应用程序的 WebView 中)。

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

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

  3. 您的服务器获取详细信息后的付款 list 也可以在 HERE 中找到。

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

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

通过 curl 命令进行的示例 API 测试如下:

第 1 步 - 获取用于身份验证的访问 token

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"

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

{
  "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 步 - 使用访问 token 和支付 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"
  }
}

关于php - 验证 Android 在 Magento 站点中传递的 paypal pay id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37299119/

相关文章:

magento - magento 中 local.xml 的更新似乎很重要

php - Symfony 在 CheckboxType 中转换 ChoiceType

java - 从 Android 应用程序启动两个 Activity

Android Camera Api 2 触摸手动对焦

php - 在 PHP 中将大量数据作为脚本例程导入时,XML 是最好的数据交换格式吗?

java - 无法在 Android 中登录 OpenERP

javascript - 表单提交后保留数据库查询结果

php - 在php中对数据列表进行排序?

php - 如何使用backbone.js从服务器渲染数据

android - 如何在 Android 设备上测试应用程序