来公众号体验一下:
先看代码:
创建文件:index.php
<?php
// 引入配置密钥的文件
require 'config.php';
// 验证签名
function checkSignature($signature, $timestamp, $nonce, $token) {
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
return $tmpStr == $signature;
}
// 发送HTTP GET请求
function httpGet($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
// 发送HTTP POST请求
function httpPost($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . API_KEY
]);
$result = curl_exec($ch);
if (curl_errno($ch)) {
file_put_contents('log.txt', "CURL Error: " . curl_error($ch) . PHP_EOL, FILE_APPEND);
}
curl_close($ch);
return $result;
}
// 解析XML数据
function parseXML($xml) {
return (array) simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
}
// 获取保存的对话历史
function getConversationHistory($userId) {
$historyFile = "conversation_history_$userId.json";
if (file_exists($historyFile)) {
return json_decode(file_get_contents($historyFile), true);
}
return [
[
"role" => "system",
"content" => SYSTEM_CONTENT
]
];
}
// 保存对话历史
function saveConversationHistory($userId, $history) {
$historyFile = "conversation_history_$userId.json";
file_put_contents($historyFile, json_encode($history, JSON_UNESCAPED_UNICODE));
}
// 处理微信消息
function handleWeChatMessage($message) {
$toUserName = $message['FromUserName'];
$fromUserName = $message['ToUserName'];
$createTime = time();
$msgType = $message['MsgType'];
$content = isset($message['Content']) ? $message['Content'] : '';
$msgId = isset($message['MsgId']) ? $message['MsgId'] : '';
// 初始化回复内容
$responseContent = '';
// 获取对话历史
$conversationHistory = getConversationHistory($toUserName);
// 根据消息类型处理不同的回复内容
if ($msgType == 'text') {
// 构建请求数据
$requestData = [
"model" => "deepseek-chat",
"messages" => array_merge($conversationHistory, [
[
"role" => "user",
"content" => $content
]
]),
"temperature" => 0.7
];
// 发送请求到AI API
$response = httpPost(API_URL, json_encode($requestData, JSON_UNESCAPED_UNICODE));
// 解析API返回的JSON数据
$responseJson = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
// JSON解析失败
$responseContent = " 抱歉,出了点问题,请稍微再试.";
} else {
if (isset($responseJson['error'])) {
// API返回错误
$responseContent = "API Error: " . $responseJson['error']['message'];
} else {
// 获取AI回复内容
$responseContent = $responseJson['choices'][0]['message']['content'];
}
}
} elseif ($msgType == 'image') {
// 用户发送图片
$responseContent = "抱歉,我暂时还不能查看图片内容";
} elseif ($msgType == 'event') {
// 处理事件消息
$eventType = $message['Event'];
if ($eventType == 'subscribe') {
// 用户关注公众号
$responseContent = "欢迎来到梵星网,请问我有什么可以帮助您的吗?";
} elseif ($eventType == 'SCAN') {
// 用户登录成功(假设使用的是某种登录事件)
$responseContent = "登录成功";
}
}
// 保存对话历史
$conversationHistory[] = [
"role" => "assistant",
"content" => $responseContent
];
saveConversationHistory($toUserName, $conversationHistory);
// 构建回复XML
$responseXML = "<xml>
<ToUserName><![CDATA[$toUserName]]></ToUserName>
<FromUserName><![CDATA[$fromUserName]]></FromUserName>
<CreateTime>$createTime</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[$responseContent]]></Content>
</xml>";
return $responseXML;
}
// 主函数
function main() {
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$echoStr = $_GET['echostr'];
if (isset($echoStr) && checkSignature($signature, $timestamp, $nonce, TOKEN)) {
echo $echoStr;
exit;
}
$xmlData = file_get_contents('php://input');
$message = parseXML($xmlData);
if (is_array($message) && isset($message['MsgType'])) {
$responseXML = handleWeChatMessage($message);
echo $responseXML;
} else {
echo "Invalid message format";
}
}
main();
创建文件:config.php
<?php
// 定义常量
define("TOKEN", "替换成您自己的公众号token");
define("API_URL", "https://api.deepseek.com/chat/completions");//不需要动
define("API_KEY", "替换成自己的密钥");
// 定义附加职业工作内容
define("SYSTEM_CONTENT", "介绍:
你是一个梵星网的综合顾问,回答关于梵星网的问题,包括用户注册、新闻内容、广告推广投放等相关的信息。梵星网的官网是 https://fanxiy.cn/。
身份:
梵星科技团队研发的人工智能,梵星科技是一个互联网科技公司,涉及产业有新闻,支付(易付通支付是梵星科技旗下的产品https://pay.fanxiy.cn/这个链接只是支付产品的链接地址,请注意易付通支付目前暂未公开使用,目前只是邀请制)
");
代码是自己写的,可以在微信公众号搜索‘梵星网’体验效果,对接的是deepseek官网,密钥需要大家自己去申请,都是免费的个人可以用好长时间。
代码解读:
// 定义附加职业工作内容
define("SYSTEM_CONTENT", "介绍:
你是一个梵星网的综合顾问,回答关于梵星网的问题,包括用户注册、新闻内容、广告推广投放等相关的信息。梵星网的官网是 https://fanxiy.cn/。
身份:
梵星科技团队研发的人工智能,梵星科技是一个互联网科技公司,涉及产业有新闻,支付(易付通支付是梵星科技旗下的产品https://pay.fanxiy.cn/这个链接只是支付产品的链接地址,请注意易付通支付目前暂未公开使用,目前只是邀请制)
");
可以自行修改,可以给ai附加职务,列如:你是一名医生,只回答医学相关的问题。
微信公众号相关必要字节,看不懂请不要进行修改。
这段代码是实现与用户进行多轮对话,无需修改
有注释我就不解释了,可以修改对应的话术。
好了就到这吧,有什么问题评论解答。