AliMPay - 一个手搓的自建支付宝码支付

hqt 2025-07-15 17:22 1

开发原因:看到某6%码支付有感,打算手搓一个

原版CLI写的很快(Python写逻辑 让AI改PHP 丢给ai干了我几个小时。。。

什么时候我能学会写前端 只会写后端逻辑写不了啥好玩的


AliMPay - 支付宝码支付系统


一个基于支付宝转账码的自动化支付解决方案,支持经营码收款和转账码收款两种模式。



特性



  • ^-^ 自动监控: 实时监控支付宝账单,自动检测支付状态

  • ^-^ 码支付: 支持经营码收款和转账码收款

  • ^-^ 智能超时: 5分钟支付时限,超时订单自动清理

  • ^-^ 安全可靠: MD5签名验证,防止数据篡改

  • ^-^ 协议兼容: 100%兼容CodePay协议


快速配置


1. 环境要求



  • PHP 7.4+

  • Composer

  • 支付宝开放平台应用


2. 安装步骤


# 下载项目
# 安装依赖
composer install

# 复制配置文件
cp config/alipay.example.php config/alipay.php

3. 支付宝配置


获取支付宝应用参数



  1. 登录 支付宝开放平台

  2. 创建"网页/移动应用"

  3. 获取以下参数:

    • 应用ID: 应用详情页的AppId

    • 应用私钥: 使用密钥工具生成

    • 支付宝公钥: 从平台获取

    • 用户ID: 账户中心的账号ID




可以参考这个文章申请应用,一般都会有一个默认的 生成密钥即可


配置文件设置


编辑 config/alipay.php


<?php
return [
'app_id' => 'YOUR_APP_ID', // 应用ID
'private_key' => 'YOUR_PRIVATE_KEY', // 应用私钥
'alipay_public_key' => 'YOUR_ALIPAY_PUBLIC_KEY', // 支付宝公钥
'transfer_user_id' => 'YOUR_USER_ID', // 支付宝用户ID

// 其他配置保持默认即可
];

获取商户密钥


首次运行需要获取系统分配的商户ID和密钥:


# 启动服务
# 访问健康检查,系统会自动生成商户配置
curl http://domain/health.php

# 查看生成的商户信息
cat config/codepay.json

商户配置文件示例


{
"merchant_id": "1001123456789012",
"merchant_key": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"created_at": "2024-01-01 12:00:00",
"status": 1,
"balance": "0.00",
"rate": "96"
}

重要:请妥善保存 merchant_id (商户ID) 和 merchant_key (商户密钥) ,这是商户接入时必需的参数。


4. 启动服务 下方两个模式二选一


码支付模式


经营码收款(推荐)



目前支付宝放水,进入经营码申请页面填写商户信息时,返回,就会提示是否免填写开启经营码

如果实在没有此处使用收款码替代,或者使用下方转账方式



特点: 无需转账备注,通过金额+时间匹配订单




  1. 上传经营码:将支付宝经营码二维码保存为 qrcode/business_qr.png




  2. 启用配置:编辑 config/alipay.php




'payment' => [
'business_qr_mode' => [
'enabled' => true, // 启用经营码模式
]
]

工作原理



  • 相同金额的订单自动增加0.01元偏移(1.00→1.01→1.02…)

  • 客户扫码支付对应金额

  • 系统通过金额和时间匹配订单


转账收款(无需额外配置)


工作原理



  • 客户转账时填写订单号作为备注

  • 系统监控账单,通过备注匹配订单


支付宝调用流程


创建支付订单


参考码支付/易支付协议


监控支付状态


系统会自动:



  1. 查询账单: 每30秒查询支付宝账单API

  2. 匹配订单: 根据模式匹配相应订单

  3. 更新状态: 自动更新订单为已支付

  4. 发送通知: 向商户notify_url发送支付成功通知


查询订单状态


# 查询单个订单
GET /api.php?act=order&pid=商户ID&out_trade_no=订单号

# 查询商户信息
GET /api.php?act=query&pid=商户ID&key=商户密钥

支付页面


访问 /submit.php 生成支付页面,包含:



  • 订单信息展示

  • 二维码显示

  • 实时倒计时(5分钟)

  • 支付状态检查


系统监控


健康检查


# 检查系统状态
curl http://domain/health.php

日志查看


# 查看实时日志
tail -f data/app.log

目录结构


alimpay/
├── api.php # API接口
├── submit.php # 支付页面
├── mapi.php # 移动端API
├── health.php # 健康检查
├── qrcode.php # 二维码访问
├── config/ # 配置文件
│ └── alipay.php # 支付宝配置
├── src/Core/ # 核心类库
├── data/ # 数据存储
└── qrcode/ # 二维码文件

常见问题


Q: 支付检测延迟多久?


A: 通常在支付完成后30秒内检测到并发送通知。


Q: 订单超时时间是多久?


A: 订单创建后5分钟内必须完成支付,超时自动删除。


Q: 如何调试支付问题?


A: 查看 data/app.log 日志文件,使用健康检查接口排查。


Q: 如何部署到生产环境?


A: 将项目部署到Web服务器,配置好支付宝参数即可。


开源协议


MIT License


免责声明


本项目仅供学习交流使用,使用者需确保遵守相关法律法规和支付宝服务协议。


Github地址 GitHub - ours1505/AliMPay

点点Star谢谢喵

最新回复 (19)
  • super_cyc 07-15 17:45
    1

    厉害啊11

  • 魔力鸽 07-15 17:47
    2

    感觉很少看到用 PHP 写项目的佬 ^-^

  • 退堂鼓演奏家 07-15 17:48
    3

    PHP是最好的语言

  • 大帅哥 07-15 18:15
    4

    感谢大佬!

  • 不想上班 07-15 18:19
    5

    厉害了佬

  • 宮森 あおい 07-15 20:06
    6

    佬太强啦!

  • lueluelue 07-15 20:07
    7

    太强了!

  • vasn 07-15 20:09
    8

    太强了!

  • nnas 07-15 20:10
    9

    感谢佬,太厉害了

  • Mason 07-15 20:14
    10

    太强了佬

  • b9348 07-15 20:16
    11

    这个需要营业执照吗,需要商户认证吗,收款码能收花呗的可以吗

  • hqt 楼主 07-15 20:17
    12

    可以。

    不需要 你只要有收款码就行

    或者使用转账模式

  • emper0r 07-15 20:17
    13

    太强了佬

  • b9348 07-15 20:18
    14

    收款码用的二维码是他转换过的还是就是自己的?被举报了会不会封号啊,异地线上收款

  • fixbug 07-15 20:19
    15

    太强了,佬

  • hqt 楼主 07-15 20:22
    16

    码是裸码

    转账是支付宝的landing跳转alipay://


    看你做什么 容易被举报的就去用抗投易支付吧 别用来干坏事


    我用支付宝那个不填资料的经营码 挂了小一个月了 5k流水 没事

  • b9348 07-15 20:23
    17

    肯定干正经的,就是怕恶意举报也封号,主要是我担心没备案也违规

  • p1gd0g 07-16 17:08
    18

    佬友牛的,比我之前发的那个容易多了


    国内虚拟物品自动发货流程

  • CalaseLin 07-22 19:23
    19

    佬这个支持易支付接口么?我部署了返回报错,说是签名对不上

* 帖子来源Linux.do
返回