Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >公众号接入 chatGPT 教程(附源码)

公众号接入 chatGPT 教程(附源码)

原创
作者头像
攻城狮杰森
修改于 2023-03-27 13:18:55
修改于 2023-03-27 13:18:55
8K230
代码可运行
举报
文章被收录于专栏:技术集锦技术集锦
运行总次数:0
代码可运行

最新 ChatGPT 小程序、网页等服务地址:http://ai.coder-jason.cn 声明:本文仅供技术交流使用,阅读本文需具备一定的开发能力

前置准备

  1. 一个域名
  2. 一台服务器
  3. 一个公众号

域名配置

在你的域名服务商新建二级域名并绑定服务器主机IP

服务器配置

上传下面的python文件到你的服务器,并修改代码段中相应位置代码(token、api-key、port)

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import time
from flask import Flask,make_response,request
import openai
from flask import Flask, request
from flask_caching import Cache
import xml.etree.cElementTree as ET
import hashlib
import requests
import re
import os

cnt = 0
my_wx_token = "" # 自定义字母和数字组合即可,后续需要填入公众号后台
my_gpt_key = "" # 这里填写你在OpenAI后台创建的API-KEY
my_switch_chatgpt = True

app = Flask(__name__)
env_dist = os.environ
cache = Cache(app, config={'CACHE_TYPE': 'simple', "CACHE_DEFAULT_TIMEOUT": 30})

@app.route('/',methods=['GET','POST'])
def wechat():
    if request.method == 'GET':
        signature = request.args.get("signature", "")

        timestamp= request.args.get("timestamp", "")

        nonce= request.args.get("nonce", "")

        echostr= request.args.get("echostr", "")
        print(signature, timestamp, nonce, echostr)

        token=my_wx_token

        data =[token, timestamp, nonce]

        data.sort()

        temp = ''.join(data)

        sha1 = hashlib.sha1(temp.encode('utf-8'))

        hashcode=sha1.hexdigest()
        print(hashcode)

        if hashcode == signature:
            print("wechat commit check OK")
            return echostr
        else:
            print("GET error input msg")
            return "error-return\r\n"
    else:
        xmlData = ET.fromstring(request.stream.read())
        msg_type = xmlData.find('MsgType').text
        if msg_type == 'text':
            ToUserName = xmlData.find('ToUserName').text
            FromUserName = xmlData.find('FromUserName').text
            CreateTime = xmlData.find('CreateTime').text
            
            print(ToUserName)
            print(FromUserName)
            print(CreateTime)
            
            global cnt
            cnt += 1
            print('-------> ' + str(cnt))
            
            return generate_response_xml(FromUserName, ToUserName, xmlData.find('Content').text)
                           
def text_reply(FromUserName, ToUserName, output_content):
    reply = '''
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[%s]]></Content>
    </xml>
    '''
    response = make_response(reply % (FromUserName, ToUserName, str(int(time.time())), output_content))
    response.content_type = 'application/xml'
    return response

def generate_response_xml(FromUserName, ToUserName, input_content):
    output_content = generate_response(input_content)
    return text_reply(FromUserName, ToUserName, output_content)

outofsevice_txt = "抱歉,<a href=\"https://mp.weixin.qq.com/s/0LN37YiERJgMyvIDpzRcAQ\">攻城狮杰森的ChatGPT服务助手</a>正在维护中,暂时无法预估维护持续时间,请明天再来尝试吧。"

@cache.memoize(timeout=60)
def generate_response(prompt):
    
    if not my_switch_chatgpt:
        return outofsevice_txt
        
    openai.api_key = my_gpt_key
    
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=prompt,
        temperature=0,
        max_tokens=1024,
        top_p=1,
        frequency_penalty=0.0,
        presence_penalty=0.0,
    )
    
    message = response.choices[0].text
    print(message)
    
    ans = message.strip()
    return ans
               
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=xxxx, debug=True)#开放xxxx端口

使用宝塔是比较快捷的配置方式,安装宝塔面板后,进入软件商店,安装下面两个插件

打开 python 项目管理器 ,简单配置下我们要启动的项目

启动后映射项目域名,顶级域和二级域都可以,比如我这里填入的是 chatgpt.coder-jason.cn

公众号配置

进入公众号后台,找到设置与开发,进入基本配置,由于我这里已经配置好了,这里仅演示下怎么添加启用

点击添加配置

token 值就是在上述代码段中填入的值,自定义字母和数字组合即可

点击提交后,如果服务器中的项目启动无误,则会提示 token校验成功

接下来就可以回到公众号和 chatGPT 愉快的交流啦~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
23 条评论
热度
最新
换了uwsgi启动,选了80端口才可以映射,但是公众号一直验证token失败。py文件里已经改好了token了。奇怪了
换了uwsgi启动,选了80端口才可以映射,但是公众号一直验证token失败。py文件里已经改好了token了。奇怪了
661举报
检查下后台服务,验证不过说明服务异常,排查下端口、域名、后台绑定等
检查下后台服务,验证不过说明服务异常,排查下端口、域名、后台绑定等
回复回复点赞举报
https://chatgpt.coder-jason.cn/ 这个域名好像用不了了 作者 还有别的域名吗
https://chatgpt.coder-jason.cn/ 这个域名好像用不了了 作者 还有别的域名吗
回复回复点赞举报
查看全部6条回复
为什么我配好后,公众号提示“该公众号提供的服务出现故障,请稍后再试”
为什么我配好后,公众号提示“该公众号提供的服务出现故障,请稍后再试”
回复回复点赞举报
腾讯云的话 国内能支持调用api吗
腾讯云的话 国内能支持调用api吗
回复回复点赞举报
作者大大怎么加你vx,小弟有问题想咨询下
作者大大怎么加你vx,小弟有问题想咨询下
回复回复点赞举报
chatgpt最新服务地址:http://ai.coder-jason.cn
chatgpt最新服务地址:http://ai.coder-jason.cn
22点赞举报
token验证失败咋办作者
token验证失败咋办作者
回复回复点赞举报
这说明后台服务没有搭建好,直接访问后台绑定的域名,有返回值说明正常
这说明后台服务没有搭建好,直接访问后台绑定的域名,有返回值说明正常
回复回复点赞举报
映射的时候提示:该项目没有端口无法映射,uwsgi模式现阶段不支持sock文件模式映射。创建python项目的时候选项完全一致,但是没有端口一栏,会是这个原因吗?
映射的时候提示:该项目没有端口无法映射,uwsgi模式现阶段不支持sock文件模式映射。创建python项目的时候选项完全一致,但是没有端口一栏,会是这个原因吗?
77点赞举报
宝塔的项目管理器版本更新后没有端口了,可以回退下版本或者直接修改配置文件。欢迎私信交流~
宝塔的项目管理器版本更新后没有端口了,可以回退下版本或者直接修改配置文件。欢迎私信交流~
回复回复点赞举报
提示说没有这个requirements.txt 怎么搞啊作者
提示说没有这个requirements.txt 怎么搞啊作者
回复回复点赞举报
查看全部7条回复
会自动过滤非法信息吗,会封号吗
会自动过滤非法信息吗,会封号吗
11点赞举报
公众号本身就支持开发,这个应该不会
公众号本身就支持开发,这个应该不会
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
教你搭建微信公众号自动答复机器人
昨天我们的文章中说到:使用图灵机器人作为应答机器人可以满足要求,但是每天的回复条数在不花钱的情况下只能有100条。对于我这样贫困线人口怎么可能每个月花费99元就为了自动回复呢。于是我就在想还有没有其它的方式能够快速做一个请求和应答表呢?
菜鸟小白的学习分享
2020/07/14
2.1K0
教你搭建微信公众号自动答复机器人
微信公众号推送如何写代码
写微信公众号推送的代码需要用到微信公众平台提供的开发者文档和API接口。以下是一个示例代码,包含了获取用户信息和回复文本消息:
hide
2023/12/12
3390
微信公众号推送如何写代码
手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)
因为微信消息的转发,需要服务器在外网环境下进行访问,而我们正常编写代码需要在本地环境,所以我们需要通过Natapp进行内网穿透(成本为每月9元)
Maynor
2023/09/26
6830
手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)
公众号服务器搭建与交互原理
自此已经成功创建 http://1.maizi.applinzi.com 这个应用。
一粒小麦
2019/07/18
2.2K0
公众号服务器搭建与交互原理
手把手教你用图灵机器人做微信公众号自动回复助手 手把手教你用图灵机器人做微信公众号自动回复助手
创建成功后,会自动跳转到机器人设置界面,在这里你可以对机器人进行个性化定制。其实,图灵机器人提供简单的方法,快速接入微信公众号,这太没有挑战性了,对于喜欢搞事情的我们,肯定不能选择这种方法。
尾尾部落
2018/09/04
2.5K1
手把手教你用图灵机器人做微信公众号自动回复助手
		
			手把手教你用图灵机器人做微信公众号自动回复助手
独立开发微信公众号服务的一次复盘
上篇文章主要分享了异步编程的一些经验。主要包括回调函数,发布订阅,Promise,async await以及yield关键字。
terrence386
2022/07/14
4610
独立开发微信公众号服务的一次复盘
python 微信公众号开发[1] 后台服务器端配置与公众号开发配置
微信公众号开发的硬件必备条件:(1)申请一个公众号 (2)有公网ip的服务器(最好是阿里云,腾讯云等的云服务器)(3)解析到(2)中服务器地址的域名(阿里云,腾讯云购买即可)。
锦小年
2020/03/18
5.2K2
Salesforce与微信公众号集成实现输入关键字搜索文章
本篇参考微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
Zero-Zhang
2020/03/19
9950
Java微信公众号开发(附源码!!!)
笔者最近在为一个艺考服务团队开发手机端的服务,由于开发app需要的时间较长,所以选择开发微信公众号。本人比较擅长Java开发,所以本文是基于Java语言的公众号开发。话不多说,直接进入正题。
全栈程序员站长
2022/08/29
7810
Java微信公众号开发(附源码!!!)
【黄啊码】php实现关注公众号自动回复消息(网上教程有大坑,慎用)
废话不多说,直接上代码 define("TOKEN", config("wx_token")); $wechatObj = new Wxapi(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class Wxapi { /** * 微信公众号验证 */ public function valid() { $echoStr = $_GET["ech
黄啊码
2022/06/15
4660
微信开发教程(一):服务器环境搭建
微信配置第一步,进行服务器接口的绑定,这样才能让手机可以关注访问 如果只是个人开发测试使用,为了有完整权限,建议使用测试账号:  申请地址http://mp.weixin.qq.com/debug/c
肖哥哥
2019/02/22
1.2K0
WeLM简介及微信公众号开发
我的公众号后台设置了关键词自动回复,但是经常收到很多读者打错别字,导致无法触发,正巧,前段时间刚申请到WeLM的使用权限,于是就想着给公众号升级一下。
zstar
2022/11/14
2.8K0
WeLM简介及微信公众号开发
微信公众号推送消息笔记
根据业务需要,开发一个微信公众号的相关开发,根据相关开发和整理总结了一下相关的流程和需要,进行一些整理和总结分享给大家,最近都在加班和忙碌,博客已经很久未更新了,打气精神,再接再厉,申请、认证公众号的一系列流程就不在这里赘述了,主要进行的是技术的分享,要达到的效果如下图:
stark张宇
2024/07/23
3310
Spring Boot 开发微信公众号后台,看看松哥公众号后台是怎么实现的!
Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台。
江南一点雨
2019/11/01
1.2K0
Spring Boot 开发微信公众号后台,看看松哥公众号后台是怎么实现的!
手把手教你开发微信公众号后台
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2020/08/21
3K0
手把手教你开发微信公众号后台
关于chatGPT接入微信公众号
最近OpenAI的chatGPT出圈了,既然是对话程序,自然而然就会想到能跟公众号结合,于是我研究了一下,实现了本公众号的chatGPT接入,关注并跟我公众号对话即可体验:
花叔
2023/01/05
28.3K7
关于chatGPT接入微信公众号
php-微信公众号与新浪sae接口代码
定义TOKEN,开发启用时用到; 定义一个wechatCallbackapiTest()的类; 验证消息确实来自微信服务器; 接受原始的xml数据包; 封装你想发送的xml数据返回给用户;
kdyonly
2023/03/03
4980
推荐阅读
相关推荐
教你搭建微信公众号自动答复机器人
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验