同步Paypal付款记录到NetSuite并核销或者记录存款的最小方案一例
Paypal提供了API供用户调取付款的订单信息,编写SuiteScript调取这个接口可以实现一个功能简单的Paypal付款与NetSuite集成,从而为系统已有的发票(Invoice)创建付款(Payment),对没有发票的订单创建客户存款(customer deposit)。本文仅提供思路和技术要点,并不是可以运行的代码;而实际应用场景中,由已有的逻辑可以灵活扩展到更多的功能。 前提 系统已有其他的方案集前台电商网站(BigCommerce、Shopify、Magento等等),电商网站的订单会被同步到NetSuite中。 设计要点 本章节对方案的一些技术要点着重介绍一下。 Paypal API的验证类型 Paypal采用的是OAuth2.0验证,因此每次请求之前需要先获取token,然后请求数据。对于Paypal的token获取请求和请求数据的请求,都需要在请求的头部声明'Accept': 'application/json',否则会提示错误MEDIA_TYPE_NOT_ACCEPTED。 Paypal API的选择 我选用的是https://api-m.paypal.com/v1/reporting/transactions,这个请求的结果包含了所有的客户付款、手续费等等信息,对于客户付款的记录则包含了币种、发票号码的信息。这个API我使用了3个参数:时间范围、状态、类型。 你可能也可以选取其他report类型的API,或者在transactions的API上找到更多功能。具体参考https://developer.paypal.com/docs/api/transaction-search/v1/#search_get Paypal API请求数据的时间问题 Paypal使用的是UTC时间戳,没有时区背景。所以为了避免混乱(此方案将在中国使用,而客户主要是北美)推荐使用前一天日期。 功能流程 方案开发完成将是一个MapReduce的脚本,每天在运行一次,获取前一天的结果。 在getIntputData阶段,请求数据,并生成一个多行的自定义记录,每一行包括了如下信息: 在Map阶段,对于状态不是已核销的自定义记录,查找Invoice的编号和状态,尝试创建payment或customer deposit,对必填字段赋值。 在Summarize阶段,对成功与失败的记录生成log,给管理员和财务人员发送提示邮件。