**
重点 订阅号不具有微信支付功能
**
参考
https://blog.csdn.net/sinat_28371057/article/details/78948877
https://blog.csdn.net/qq_35850638/article/details/121508702
在微信公众平台开发-基本设置页面,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey。
token可以任意填写,对应代码中验证的token
URL对应是 验证token的接口方法
2、代码中进行验证token(如果使用框架的,建议在根目录创建一个文件来验证token 或者写路由)
3 Token验证接口
Token及其它参数拼接并字典排序再做sha摘要计算
微信定期调用此接口来验证身份正确性
通过摘要验证判断请求来源微信(Token配置在微信平台,固而判断来源)
步骤如下:
1,确定微信Token访问你php程序的网址 http://我的网站IP/Token3.php
2,编写Token3.php:
<?php
header('Content-type:text');
define("TOKEN", "myname");//此处改成你在公众号平台上配置好的Token请求名称,我用的是:“myname”
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
header('content-type:text');
echo $echoStr;
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if($keyword == "?" || $keyword == "£¿")
{
$msgType = "text";
$contentStr = date("Y-m-d H:i:s",time());
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
}else{
echo "";
exit;
}
}
}
?>