2019-1-27 澳洲微信支付: Paylinx 开发

实现思路+具体代码

2019-1-27 澳洲微信支付: Paylinx 开发

(题图是2019年1月27号 http://www.paylinx.com.au/ Paylinx 官网的截图)

Paylinx 介绍

Paylinx 是一家澳洲的支付商。
简单说就是,假设你有一个澳洲的网店。用了 Paylinx 之后就能进行微信收款了。
(支付宝收款貌似也可以。官网和文档里都有说,但是我没实现过所以就不介绍了)

这篇文章对谁有用?有什么用?

对谁有用?希望实现 Paylinx 微信支付的程序员
有什么用?可以看这篇文章来大大缩减你的开发时间。因为不但有思路介绍而且有具体代码。

本文比较适合 Ruby on Rails 程序员,因为最后给出的代码都是 Ruby on Rails。
但如果你是 PHP 或 Java 程序员也没关系,思路是一样的,只是具体代码稍有不同。
看着代码结构稍微翻译一下就可以了。

这篇文章讲什么

如何用 Ruby on Rails 5 实现 Paylinx 的微信扫码支付部分。
在文档中叫 "Wechat - 创建交易"
文档地址
文档截图:
paylinx_wechat
这篇文章只讲这一节,因为我只实现了这一节。

先上最后结果

  1. 用户点击付款
    pay1
  2. 显示二维码
    pay2
  3. 用户扫码付款后流程结束,进入订单详情页
    pay3-v2

流程

我们先从最高层次看一遍整个流程。然后再讲细节。

  1. 你给 Paylinx 发一个请求,把 "要支付多少钱","订单号","支付后的回调地址" 等信息传过去
  2. Paylay 收到请求,然后返回数据,其中最重要的是 code_url: weixin://wxpay/bizpayurl?pr=eksyRz2
  3. 你把 code_url 进行二维码编码,显示给用户看
  4. 用户微信扫码支付,Paylinx 然后会给你之前给的 "支付后的回调地址" 发一个请求,告知你用户已经给钱了。然后你就可以走自己的业务逻辑了,包括修改订单状态等。最后返回一个 "SUCCESS" 就行。

细节

  1. 首先根据 Paylinx 的文档。为了“创建交易”
    你要把以下数据以 xml 格式发给 Paylinx
    paylinx1111
    注意: 此处需要签名,注意 sign 字段。
    签名会需要 key, 这个 key 是在 Paylinx 注册后会颁发给你的。
    格式类似这样 i111HhkA0cHoYC29d9Z222OTYMAIzzz2T
    (为了安全,内容已混淆,改了一些地方,我当然不可能把我们的 key 原样泄露出来)
    key 大概是这个长度,由字母和数字混合组成。

sign 签名的方法是:
paylinx_sign
别担心,后面会给代码

请求发出去之后,根据 Paylinx 文档,应该返回如下格式
paylinx_22233

此处我给 notify_url 和 code_url 高亮了因为这2个比较重要。
notify_url 是"回调地址",意思是用户支付后, Paylinx 会把通知发到这个地址。
code_url 是二维码

  1. 这些信息你都要存起来。
    比如用户可能关掉了二维码支付页面。
    下次再来,总不可能下次进来就没有付款方式了把。
    所以 code_url 等几个字段的信息要存起来。

  2. 处理回调
    用户支付后会发回调。根据文档:
    callback

  3. 你应该验证签名,确保的确是 Paylinx 发过来的请求,而不是别人瞎发的请求想占你便宜。

  4. 签名没问题了,就把用户的订单状态改成已支付。

具体代码

https://github.com/1c7/paylinx-ruby-on-rails

吐槽

  1. 文档差,特别是"参数签名"和"接口回调"的部分

  2. 测试费钱,没有 sandbox 测试模式,不像 Stripe 那么方便。
    最少需要 1.30 澳元。低于 1.30 澳元会报错。所以每次测试 Paylinx 至少要 6.47 元人民币。
    WechatIMG8

全文完

贴出来只是希望节省其他程序员的时间。
我从2019年1月27号的周日下午14:00 弄到 2019年1月28号01:39。
包括了写代码,测代码,修代码。写这篇博客。把代码开源出来。

感谢阅读。

如果你希望更省事

希望我可以直接帮你开发。
请联系 [email protected]