> For the complete documentation index, see [llms.txt](https://bothub.gitbook.io/project/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bothub.gitbook.io/project/advanced-tool/api/transaction-notification.md).

# 交易信息通知

让您第一时间获取用户在Messenger上的订单

### 交易信息即时通知 <a href="#jiao-yi-xin-xi-ji-shi-tong-zhi" id="jiao-yi-xin-xi-ji-shi-tong-zhi"></a>

Bothub提供对基于Messenger的交易提供了通知机制。商户可以通过实现bothub定义的数据交换机制，让用户在Messenger里的任何和交易相关的操作都即时反应到商户的系统中，便于商户进行库存管理，发货操作和客服回应。

{% hint style="info" %}
商户可以在后台的“设置”界面填写交易通知链接
{% endhint %}

![](https://3545383198-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LBxiFMKIFEMsz8J7IuU%2F-LCWgJ0INpg0iMxJtf3b%2F-LCWq6YMG08LwF4wU-u-%2Fp3f3p401.png?alt=media\&token=c73be676-158d-43a3-9c53-ebdcc6571062)

作为示例，此处以订单通知为例说明通知的工作方式。 订单通知是指当有Facebook用户通过Messenger完成支付后，若商户填写了订单通知链接，bothub会向此地址发送一个Post格式的Http订单通知请求。请求的参数如下：

### 参数说明

| 参数                                                           |                                              |
| ------------------------------------------------------------ | -------------------------------------------- |
| request.timestamp                                            | unix时间戳，以秒为单位(e.g. 1401111222)               |
| request.token                                                | 令牌，以确认请求发送者为Bothub。令牌计算方式见下文。                |
| request.request\_id                                          | 该请求的唯一标识符                                    |
| order.products                                               | 商品信息，为数组，其中每个元素如下                            |
| order.products.id                                            | 商品外部id，由商户在合作时提供给Bothub                      |
| order.products.name                                          | 商品名称                                         |
| order.product.price\_single                                  | 单个商品价格                                       |
| order.products.amount                                        | 商品数量                                         |
| sender.id                                                    | 用户的facebook id                               |
| sender.email                                                 | 若此facebook id做过account linking并绑定了邮箱，则此处提供之  |
| sender.phone\_number                                         | 若此facebook id做过account linking并绑定了手机号，则此处提供之 |
| sender.username                                              | 若此facebook id做过account linking并绑定了用户名，则此处提供之 |
| payment.requested\_user\_info.contact\_name                  | 联系人的姓名                                       |
| payment.requested\_user\_info.contact\_email                 | 联系人的邮箱                                       |
| payment.requested\_user\_info.contact\_phone                 | 联系人的手机号                                      |
| payment.requested\_user\_info.shipping\_address.country      | 国家                                           |
| payment.requested\_user\_info.shipping\_address.state        | 州                                            |
| payment.requested\_user\_info.shipping\_address.city         | 城市                                           |
| payment.requested\_user\_info.shipping\_address.street\_1    | 街道信息                                         |
| payment.requested\_user\_info.shipping\_address.street\_2    | 补充街道信息                                       |
| payment.requested\_user\_info.shipping\_address.postal\_code | 邮编                                           |
| payment.payment\_credential.provider\_type                   | 付款方式                                         |
| payment.payment\_credential.charge\_id                       | 付款追踪id                                       |
| payment.shipping\_option\_id                                 | 用户选择的送货方式                                    |
| payment.amount.currency                                      | 用户支付的货币                                      |
| payment.amount.amount                                        | 用户支付的数量                                      |
| payment.shipping\_option\_id                                 | 用户选择的送货方式                                    |
| summary                                                      | 订单概要                                         |
| summary.price                                                | 订单不含税不含运费的价格                                 |
| summary.tax                                                  | 订单税                                          |
| summary.shipping\_cost                                       | 订单运费                                         |
| summary.sub\_total                                           | 订单总价                                         |
| summary.currency                                             | 订单货币                                         |
| summary.order\_identifier                                    | 订单唯一标识                                       |

* 请求样例

```
{
    "request": {
        "timestamp": 1401122222,
        "token": "4r2$s003a!@3",
        "request_id": "49192801"
    },
    "sender": {
        "id": "123456",
        "phone_number": "18729182212",
        "email": "mike@sample.com",
        "username": "anonymous" 
    },
    "payment": {
        "requested_user_info": {
            "shipping_address": {
                "street_1": "1107th, Yuyuan Road",
                "street_2": "",
                "city": "Hongji Park",
                "state": "MI",
                "country": "US",
                "postal_code": "94025"
            },
            "contact_name": "Peter Chang",
            "contact_email": "peter@anemailprovider.com",
            "contact_phone": "+15105551234"
        },
        "payment_credential": {
            "provider_type": "paypal",
            "charge_id": "ch_18tmdBEoNIH3FPJHa60ep123"
        },      
        "amount": {
          "currency": "USD",
          "amount": "29.62"
        }, 
        "shipping_option_id": "123"   
    },    
    "order": {
        "products": [
            {
                "id":"P121",
                "name": "Sample good",
                "price_single": 2,
                "currency": "USD"
            } 
        ]
    }
}
```

* Token的算法: bothub会为每一个page分发一个密钥secret，所有在此page上进行的交易，token的计算方式为

  token = sha256(timestamp + secret)\
  其中timestamp会在请求中传送给商户。例如，如timestamp为1482139994, secret为MTg2MjE1NzYyMDJf, 则token的算法为sha1('1482139994MTg2MjE1NzYyMDJf'), 结果为d2dff7379293216aa1e187dafb765a9aa63c7761
* 一个具体的示例请见[这里](https://gist.github.com/bothubai/7a66f815ba9a6e00ac41eac252a00dbc)

### 返回值

商户应对bothub发送的通知信息，应在处理完毕后返回200.

* 成功调用样例

```
{
    'request_id': "F4js0Za2" //此值和请求的request_id一致
}
```

* 失败调用样例

```
{
    "error" : {
        "message": "Missing payment",
        "type": "InvalidParamException",
        "code": 10000,
        "error_subcode": 1234567,
        "request_id": "F4js0Za2"
    }
}
```

### 重发机制

为防止商户因某些原因未能收到消息，Bothub提供了交易信息重发机制。

若商户对bothub发送的交易信息通知请求没有返回status=200，或超时仍未响应，bothub会在一段时间之后重发该请求，若仍收到status不等于200，或者超时的情况，则会再重发。这个过程一共会重复7次。每次调用的时候request\_id都会保持一致，以免接收方重复处理。

第1次重发：发送后60秒

第2次重发：第1次重发后120秒

第3次重发：第2次重发后5分钟

第4次重发：第3次重发后30分钟

第5次重发：第4次重发后1小时

第6次重发：第5次重发后6小时

第7次重发：第6次重发后1天

若第7次重发仍未获得正确的回应，之后不再重发。

### 其他交易通知

Bothub将会陆续推出多种交易通知，以让Messenger上的交易和您的系统无缝链接。如果您有定制需求请告知 <support@bothub.ai>
