支付推送技术文档

在开始阅读文档之前,您需要先注册一个支付推送的账户: 注册链接
有了账户之后,您可以通过以下简单的几步设置就可以接入个人支付了!

您可以查看 给学网 的视频,有完整的教程的哦!视频连接 >>

第一步:创建 Webhook

登录您的支付推送账户,在 后台管理 的左侧菜单栏下部, 您可以点击 创建 Webhook 按钮来创建一个新的 Webhook

在创建新的 Webhook 时, 您需要填写以下两个信息:

  1. 麦客表单的 订单字段
  2. Webhook 通知的 推送 URL
1.麦客订单字段

其中订单号字段是麦客表单记录订单号的表单的名字,比如这个表单:点击打开

记录订单字段的是 订单号 这三个字,则在创建 Webhook 的时候,您需要在 麦客订单字段 填写 订单号

而如果您记录订单字段的是 订单ID 这样,则在创建 Webhook 的时候,您需要在 麦客订单字段 填写 订单ID

2.Webhook 推送 URL

至于 推送 URL,填写您网站接收支付推送的 URL 即可。

第二步:设置 Sendcloud 转发

在第一步中创建完 Webhook 之后,我们的系统会为您的 Webhook 分配一个 唯一的设置 URL
此设置 URL 需要填写到 Sendcloud 的邮件收信转发处:
在收信地址处,推荐大家使用 随机的邮箱地址!,您也可以直接使用 配置 URL 后面的 <唯一值> ; 类似这样:
d7997d147f9e2df7a95e5e1312d7ce83@geixue.com

第三步:设置麦客表单支付推送

在麦客中创建一个表单,在表单中开启 表单内收款 功能; 在表单的 全局设置 下配置您的通知提醒:

第四步:处理支付推送

经过前面三步的配置,您在第一步中配置的 推送 URL 在用户付款之后会接收到付款信息推送:

我们会在收到信息后的 1秒3秒5秒10秒30秒60秒120秒240秒 的时间点推送信息,一共 8 次。
比如第一步配置的:https://pay.geixue.com/api/notify ,我们会将支付结果推送(POST 方式) 到这个 URL 中。

推送的主体内容为:

{
    "trade_no" : "721915543105825511",//自定义的订单号
    "mike_no" : "IFP-CN091-1904030000011132-8",// 麦客的订单号
    "platform_no" : "3376731627",// 第三方的订单号
    "amount" : 200 // 支付金额,单位为 分
}

在推送消息的时候,我们也会在 POST 推送中添加自定义
headerX-GEIXUE-SIGNATURE ; 这个 X-GEIXUE-SIGNATURE header 的值是您的 账户 API 秘钥md5() 的值;此 header 主要是用来做 通知校验 用的。

代码示例

PHP 代码

$headers = getallheaders();
$signature = $headers['X-GEIXUE-SIGNATURE'];

if($signature === md5('your-api-key')) {
    // 获取数据 $content = file_get_contents('php://input');
    // $charge = json_decode($content, true);
    // $charge['trade_no'] 即是您自定义的订单号
    // 最后返回 'success' 字符串
    echo 'success';
}

Ruby 代码

require 'json'
require "base64"
require 'digest'

# 使用 Sinatra
post '/api/notify' do
    # 解析推送通知的 JSON
    signature = request.headers['X-GEIXUE-SIGNATURE']
    # 这里填写您账户的的 API 秘钥
    api_key = 'your-api-key'
    sign = Digest::MD5.hexdigest(api_key)
    if sign == signature
         charge_json = JSON.parse(request.body.read)
         # charge_json['trade_no'] 就是您自定义的订单号了
         # 这里处理您的订单
         # 最后返回 'success' 字符串
        render plain: 'success'
    else
      # 验证不通过的逻辑
    end
end

Nodejs 代码

//  express 示例
const express = require('express');
const bodyParser = require('body-parser');

// 引入 md5  https://github.com/pvorb/node-md5
const md5 = require('md5');

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true,
}));
// 您账户的 API 秘钥
const apiKey = 'your-api-key';

app.post('/api/notify', (req, res) => {

    const headers = JSON.parse(JSON.stringify(req.headers));
    const signature = headers['X-GEIXUE-SIGNATURE'];

    const sign = md5(apiKey);

    if (sign == signature) {
        const charge = JSON.parse(JSON.stringify(req.body));
         // charge['trade_no'] 就是您自定义的订单号了
        // 处理您的订单
        // 返回 'success' 字符串
        res.send('success');
    }
});

const portToListenOn = 3800;

app.listen(portToListenOn, () => {
    console.log(`Listening on port ${portToListenOn}.`);
});