公众号接入chatGPT的详细教程 附Python源码

作者:攻城狮杰森 时间:2021-09-10 04:48:31 

前置准备

  1. 一个域名

  2. 一台服务器

  3. 一个公众号

域名配置

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

服务器配置

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

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端口

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

公众号接入chatGPT的详细教程 附Python源码

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

公众号接入chatGPT的详细教程 附Python源码

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

公众号接入chatGPT的详细教程 附Python源码

公众号配置

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

公众号接入chatGPT的详细教程 附Python源码

点击添加配置

公众号接入chatGPT的详细教程 附Python源码

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

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

公众号接入chatGPT的详细教程 附Python源码

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

公众号接入chatGPT的详细教程 附Python源码

来源:https://cloud.tencent.com/developer/article/2218457

标签:公众号,chatGPT
0
投稿

猜你喜欢

  • 设计师的幸福

    2009-05-21 11:59:00
  • Python得到弹幕并保存到Excel中怎么设置

    2021-04-04 16:42:22
  • 使用IIS调试asp程序检查错误的方法

    2007-09-13 21:54:00
  • Python的Django框架中forms表单类的使用方法详解

    2021-07-31 04:31:40
  • javaScript事件机制兼容【详细整理】

    2024-05-13 10:07:01
  • python爬虫实现POST request payload形式的请求

    2023-11-07 21:08:55
  • python实现用户登录系统

    2023-10-13 13:17:22
  • SQLServer 附加数据库后出现只读或失败的解决方法

    2024-01-18 11:29:23
  • vue实现购物车功能(商品分类)

    2023-07-02 16:34:30
  • 关于python多重赋值的小问题

    2023-08-04 06:38:16
  • NumPy索引与切片的用法示例总结

    2022-05-13 19:33:38
  • Tensorflow 多线程与多进程数据加载实例

    2023-12-30 23:53:47
  • ASP + XML + JavaScript 实现动态无限级联动菜单

    2008-06-13 06:31:00
  • Keras预训练的ImageNet模型实现分类操作

    2021-12-14 01:33:11
  • python 中的int()函数怎么用

    2021-05-21 17:52:41
  • 使用curl命令行模拟登录WordPress的方法

    2022-02-23 17:15:06
  • 关于Python与Golang语言的对比分析

    2023-03-10 18:54:06
  • 通过实例解析Python return运行原理

    2021-08-11 18:31:31
  • Python数据分析之NumPy常用函数使用详解

    2021-09-29 06:17:33
  • 读Json文件生成pandas数据框详情

    2023-01-11 19:29:01
  • asp之家 网络编程 m.aspxhome.com