雅荷心语博客
雅荷心语
心之所向便是光
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 关注本站
    • 微信
    • 微博
    • 腾讯微博
    • Twitter
    • Facebook
    • RSS订阅
Hi, 请登录     我要注册     找回密码

关于个人微信自动收款(交易)的一些构想与实现

2019-09-09 分类:后端之路 / 启回静思 / 微信平台 阅读(2941) 评论(0)

之前就有想法做一个自动收款然后交易的程序, 因为支付宝和微信的官方收款api只对企业开放!

但是前段时间因为主机商 (息壤)不做主机业务了, 导致我的备案被取消, 又在阿里云重新备案耽搁了一个月左右, 这几天才审核下来!

首先还是需要跑起来我们的微信机器人程序, 目前由很多开源的机器人程序可以自己选择, 现在以 php 的vbot 为例子:

目前主要讲技术细节:

首先我经过给微信转账查看收到数据来分析(抓包)发现, 微信支付在个人收款账号支付成功后, 除了一条模板消息之外, 没有其他的数据被监控到, 因此只能从模板消息入手了,

首先给自己的收款码付钱:

微信图片_20190909174424

 

转账之后, 接下里我们怎么分析到这条呢? 我的方法如下:

为了扩展, 我建了一个配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
  "meet": [
    "测试群",
    "加班or吃饭群",
    "供应链富豪群"
  ],
  "skeyword": [
    "记录",
    "保存"
  ],
  "at": [
    {
      "kwd": [
        "读书馆",
        "记录馆"
      ],
      "url": "xxx",
      "action": "search"
    }
  ],
  "monitor": [
    {
      "text": "红包",
      "fromType": "group",
      "type": "share",
      "url": "xxx"
    },
    {
      "text": "支付收款",
      "fromType": "official",
      "type": "official",
      "url": "xxx"
    }
  ],
  "debug": false,
  "logGroup": []
}

收到数据之后先分析数据类型: 如果是 微信公众号消息(fromType=official), 则走我们的配置文件, 也就是 monitor 项,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
protected function monitor () {
    $config = log::includeConfig();
    $message = $this->message;
    $nextData = [];
    foreach ($config['monitor'] as $k => $v) {
      $_type = strtolower(isset($message['type']) ? $message['type']: '');
      $status1 = (strtolower($message['fromType']) == $v['fromType']) ? true: false;
      $status2 = ($_type == $v['type']) ? true: false;
      $inVal = ['official', 'share'];
      if (in_array($_type, $inVal)) {
        $status3 = (strpos($message['title'], $v['text']) > 0) ? true : false;
      } else {
        $status3 = (strpos($message['content'], $v['text']) > 0) ? true : false;
      }
      if ($status1 && $status2 && $status3) {
        $nextData = $v;
        log::write($v, '命中数据');
        break;
      }
    }
    if(!empty($nextData)) {
      $text = $this->sendApi($nextData['url']);
      return $text;
    }
  }

循环配置项, 如果是公众号的消息, 并且在 原始数据的字段里有 指定的关键字, 则 触发消息推送到指定的URL(sendApi),处理完成之后再返回到服务器,

哈哈哈就是一分钱, 我们抓到的数据解析如下:

40

我们得到这些数据后开始分析, 然后返回结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public function payBack () {
    log::getInstance()->set(input(), 'payBack');
    $str = $this->rawArr['description'];
    $array = array_unique(explode(',', str_replace("\n",",",$str)));
    log::getInstance()->set($array, 'payBack');
    $money = $array[0];
    $formData = [
      'money'=> null,
      'mark'=> null
    ];
    $isMatched = preg_match_all('/¥(.*)/', $money, $matches);
    if ($isMatched) {
      $formData['money'] = $matches[1][0];
    }
    $mark = $array[1];
    $isMatched = preg_match_all('/\d{4,6}/', $mark, $matches);
    if ($isMatched) {
      $formData['mark'] = $matches[0][0];
    }
    log::getInstance()->set($formData, 'formData');
    out::success($formData, '感谢, 收到您的付款');
  }

利用正则表达式 拆了 description 字段来分析, 得到数据后返回给接口处理,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[命中数据(array)][2019-09-09 17:55:34]
-------------------------------------
{"text":"支付收款","fromType":"official","type":"official","url":"http:\/\/api.he29.com\/index\/wechat\/index.html?act=payBack"}
-------------------------------------
[sendApi数据URL(text)][2019-09-09 17:55:34]
-------------------------------------
http://api.he29.com/index/wechat/index.html?act=payBack
-------------------------------------
[sendApi接口返回(array)][2019-09-09 17:55:34]
-------------------------------------
{"code":200,"data":{"money":"0.10","mark":"2580"},"msg":"感谢, 收到您的付款"}
-------------------------------------
[系统及消息拦截处理结果:(text)][2019-09-09 17:55:34]
-------------------------------------
感谢, 收到您的付款
-------------------------------------
[:即将回复的消息(最终结果)(text)][2019-09-09 17:55:34]
-------------------------------------
感谢, 收到您的付款
-------------------------------------

sendApi 获取到了我刚才的转账金额, 还有备注(我刚备注写了2580), 完成!

程序的用途??

可以作用在一些自动交易的场景, 不需要人为干预,

例如: 我们贴出付款吗, 让用户付款之后才能查看指定的内容, 在弹出付款码的时候, 自动随机生成一个 code, 用来标示用户此次的行为, 在付款时候让用户添加到备注里来标明!

当然还有更多的场景都可以使用!

ps:来源文献参考:

01, 天明·新氧供应链富豪群~

02, 天明·加班~吃饭群

喜欢 (1) 赏 讨厌 (0)
分享到:更多 ()

相关推荐

  • 将docker安装到D盘或者其他目录
  • 使用 python 给音频增加水印,剪辑压缩后不丢失!
  • 如何使用 nodejs 下载一个 wav 音频
  • macOS 对 Demucs 的支持
  • edge-tts 初体验
  • 联盟数据查询示例
  • 科学上网记录
  • 在浏览器内使用obs-websocket-js控制obs录屏
关于我

小天明 北京·朝阳 前端搬砖工程师

碎碎念):(来自公众号)

热门文章

  • 踩坑记录——iphone上safari开启隐身模式时localStorage变为只读-雅荷心语博客踩坑记录——iphone上safari开启隐身模式时localStorage变为只读2017-02-21评论(4)
  • 程序员是怎样一群人-雅荷心语博客程序员是怎样一群人2015-12-08评论(3)
  • 百度你个大毒瘤 - 吐糟博客这几天打不开事情-雅荷心语博客百度你个大毒瘤 – 吐糟博客这几天打不开事情2015-12-28评论(2)
  • PHP 非对称加密 openssl 加密及解密方法-雅荷心语博客PHP 非对称加密 openssl 加密及解密方法2016-05-17评论(2)
  • PHPStorm10 下载安装破解汉化-雅荷心语博客PHPStorm10 下载安装破解汉化2015-12-15评论(2)
2025年7月
一 二 三 四 五 六 日
« 六    
 123456
78910111213
14151617181920
21222324252627
28293031  

最新评论

  • 前端小武 8年前 (2017-04-06)说:
    我看到了layer
  • 丁艳平 8年前 (2017-03-03)说:
  • Dawn 9年前 (2016-09-16)说:
    call_user_func_array最后的例子是错哦,你用bc方法去调用类里 另外一个方法就知道问题所在了。情况1.调用非静态方法 第一个参数应该传[类的实例,调用方法] (既然有类实例了直接-&
  • Dawn 9年前 (2016-06-21)说:
    tp框架设置了全局捕获异常的,这也没什么。坑的是 他捕获了异常。然后全部返回404。。。不知道的 还以为自己网站被删除了
  • Dawn 9年前 (2016-05-17)说:
    构造函数里的判断 用异常机制可能更好一些

其他类型

  • 芊云全景
  • 配音兔AI配音神器

博客类型

  • 芊云全景
  • 配音兔AI配音神器

左邻右舍

  • 易水寒
  • 楼教主
  • 芊云全景
  • 贤心
  • 配音兔AI配音神器

雅荷心语博客 -心之所向便是光

联系我们关于我们

© 2025 雅荷心语博客   网站地图