PHP中的Web服务

时间:2009-08-12 16:32:01

标签: php web-services

对Web服务很陌生,我需要将Web服务集成到现有应用程序中。要传递给Web服务的详细信息是

  • 唯一参考
  • 金额
  • 状态
  • 状态说明

此网络服务将更新网站上的交易状态。

什么是最好的开始方式?我从哪里开始?

2 个答案:

答案 0 :(得分:1)

虽然有许多不同类型的Web服务和将它们集成到任何东西中的模式,但如今许多服务都集成了类似的步骤。既然你以抽象的形式提出问题,我会提供一个抽象的答案 - 也许它会引发更多的问题。

我将以付款为例。

  1. 用户在机器上做某事(订购T恤)。 他们的行为更新了数据库,会话或某种存储(或行动链)。

  2. 如果合适,用户操作(1)的结果之一还将触发系统将内容推送到Web服务(如PayPal)。通常以XML格式化,您将发送带有嵌套参数的响应。您的商店会发送T恤的价格和数量。

  3. 服务接收XML请求(通常包含“API密钥”等)并对其进行处理。在PayPal的情况下,在用户完成T恤订单后,它会将您重定向回您自己的网站,以及订单信息。 (同步)

  4. 该服务可选择完成处理(或执行某些异步操作),然后向您的服务器发送XML请求。您在PHP中解析请求,然后处理数据。例如,请求可能具有'order_status'之类的属性。该属性可能包含'complete','pending', 'failed'。然后,您可以使用PHP更新数据库以反映这一点。

  5. 您的网站反映了服务对用户所做的数据库更改。例如,有关“订单状态”或“最近订单”页面的信息。

  6. 有很多很好的库和许多以前为许多不同的Web服务创建的PHP类。你甚至可以尝试搜索GitHub。并且:UPS,PayPal,Google Checkout,Facebook和许多其他人都有示例和API文档来编写您自己的实现,如果您愿意/需要。

    修改:PayPal特定信息 当PayPal发送(异步)IPN响应时,它处于POST数据中,您可以根据其规格读取和验证。

    我发现处理IPN的最简单方法(以避免修补时间)是Micah Carrick的PayPal class。我不喜欢这个命名,想要改变等待屏幕(以防万一),你可以在this gist看到我的更改。

答案 1 :(得分:0)

PHP中的restful ajax驱动的webservices几乎非常简单,特别是如果你使用jQuery。您在服务器上有代码,如:

// index.php:
if (isset($_GET['transact'])) {
    $ref = $_POST['ref'];
    $amount = $_POST['amount'];
    $status = $_POST['status'];
    $description = $_POST['description'];
    $result = transact($ref, $amount, $status, $description);

    header('Content-Type: application/json');
    return json_encode(array(status => 'success', result => $result));
}

您的客户端网络应用可能是:

// webapp.js
....
var data = { ref:4343, amount:'12.34', status:'pending', description:'deduction' };
$.post('?transact', data, function(result) {
    if (result.status == 'success') {
        var thing = result.thing; //etc..