本文給大家介紹的是個人總結(jié)的一些微信API接口,包括微信支付、微信紅包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以參考下。
微信入口綁定,微信事件處理,微信API全部操作包含在這些文件中。
微信支付、微信紅包、微信卡券、微信小店。
1. [代碼]index.php????
wcValid();
2. [代碼]微信入口類????
token = $token;
}
public function wcCheckSignature(){
try{
if (empty($this->token)) {
throw new Exception('TOKEN is not defined!');
}
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = $this->token;
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
catch (Exception $e) {
echo 'Message: ' .$e->getMessage();
}
}
public function wcValid(){
$echoStr = isset($_GET["echostr"]) && !empty($_GET["echostr"]) ? addslashes($_GET["echostr"]) : NULL;
if(is_null($echoStr)){
$this->wcMsg();
}
else{
//valid signature , option
if($this->wcCheckSignature()){
echo $echoStr;
exit;
}
else{
exit();
}
}
}
public function wcMsg(){
//get post data, May be due to the different environments
$postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) && !empty($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "";
if(!empty($postStr)){
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->zcLog(TRUE,$postObj);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$MsgType = $postObj->MsgType;
if($MsgType == 'event'){//執(zhí)行事件相應(yīng)
$Event = $postObj->Event;
switch ($Event) {
case 'subscribe'://關(guān)注
break;
case 'unsubscribe'://取消關(guān)注
break;
case 'SCAN'://掃描
break;
case 'LOCATION'://地址
break;
case 'CLICK'://點擊時間
break;
case 'VIEW'://跳轉(zhuǎn)
break;
case 'card_pass_check'://卡券審核通過
break;
case 'card_not_pass_check'://卡券審核失敗
break;
case 'user_get_card'://用戶領(lǐng)取卡券
break;
case 'user_del_card'://用戶刪除卡券
break;
case 'user_view_card'://用戶瀏覽會員卡
break;
case 'user_consume_card'://用戶核銷卡券
break;
case 'merchant_order'://微小店用戶下單付款
break;
default:
break;
}
}
else{
switch ($MsgType) {
case 'text'://文本格式
break;
case 'image'://圖片格式
break;
case 'voice'://聲音
break;
case 'video'://視頻
break;
case 'shortvideo'://小視頻
break;
case 'location'://上傳地理位置
break;
case 'link'://鏈接相應(yīng)
break;
default:
break;
}
}
////////////////////////////////////////////////////////////////////
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "
3. [代碼]微信操作類 - 更新了自定義菜單部分????
* @link
* @version 2.0.1
* @uses $wxApi = new WxApi();
* @package 微信API接口 陸續(xù)會繼續(xù)進行更新
********************************************************/
class WxApi {
//const appId
= "";
//const appSecret = "";
const appId
= "";
const appSecret = "";
//const mchid
= ""; //商戶號
//const privatekey = ""; //私鑰
public $parameters = array();
public function __construct(){
}
/****************************************************
* 微信提交API方法,返回微信指定JSON
****************************************************/
public function wxHttpsRequest($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
/****************************************************
* 微信帶證書提交數(shù)據(jù) - 微信紅包使用
****************************************************/
public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){
$ch = curl_init();
//超時時間
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
//這里設(shè)置代理,如果有的話
//curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
//以下兩種方式需選擇一種
//第一種方法,cert 與 key 分別屬于兩個.pem文件
//默認(rèn)格式為PEM,可以注釋
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem');
//默認(rèn)格式為PEM,可以注釋
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem');
curl_setopt($ch,CURLOPT_CAINFO,'PEM');
curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/rootca.pem');
//第二種方式,兩個文件合成一個.pem文件
//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
if( count($aHeader) >= 1 ){
curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
}
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
$data = curl_exec($ch);
if($data){
curl_close($ch);
return $data;
}
else {
$error = curl_errno($ch);
echo "call faild, errorCode:$error\n";
curl_close($ch);
return false;
}
}
/****************************************************
* 微信獲取AccessToken 返回指定微信公眾號的at信息
****************************************************/
public function wxAccessToken($appId = NULL , $appSecret = NULL){
$appId
= is_null($appId) ? self::appId : $appId;
$appSecret = is_null($appSecret) ? self::appSecret : $appSecret;
$data = json_decode(file_get_contents("access_token.json"));
if ($data->expire_time wxHttpsRequest($url);
//print_r($result);
$jsoninfo = json_decode($result, true);
$access_token = $jsoninfo["access_token"];
if ($access_token) {
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$fp = fopen("access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
}
else {
$access_token = $data->access_token;
}
return $access_token;
}
/****************************************************
* 微信獲取AccessToken 返回指定微信公眾號的at信息
****************************************************/
public function wxJsApiTicket($appId = NULL , $appSecret = NULL){
$appId
= is_null($appId) ? self::appId : $appId;
$appSecret = is_null($appSecret) ? self::appSecret : $appSecret;
$data = json_decode(file_get_contents("jsapi_ticket.json"));
if ($data->expire_time wxAccessToken();
$result
= $this->wxHttpsRequest($url);
$jsoninfo = json_decode($result, true);
$ticket = $jsoninfo['ticket'];
if ($ticket) {
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
}
else {
$ticket = $data->jsapi_ticket;
}
return $ticket;
}
/****************************************************
* 微信通過OPENID獲取用戶信息,返回數(shù)組
****************************************************/
public function wxGetUser($openId){
$wxAccessToken = $this->wxAccessToken();
$url
= "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN";
$result
= $this->wxHttpsRequest($url);
$jsoninfo = json_decode($result, true);
return $jsoninfo;
}
/****************************************************
* 微信生成二維碼ticket
****************************************************/
public function wxQrCodeTicket($jsonData){
$wxAccessToken = $this->wxAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken;
$result
= $this->wxHttpsRequest($url,$jsonData);
return $result;
}
/****************************************************
* 微信通過ticket生成二維碼
****************************************************/
public function wxQrCode($ticket){
$url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket);
return $url;
}
/****************************************************
* 發(fā)送自定義的模板消息
****************************************************/
public function wxSetSend($touser, $template_id, $url, $data, $topcolor = '#7B68EE'){
$template = array(
'touser' => $touser,
'template_id' => $template_id,
'url' => $url,
'topcolor' => $topcolor,
'data' => $data
);
$jsonData = json_encode($template);
$result = $this->wxSendTemplate($jsonData);
return $result;
}
/****************************************************
* 微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_base //驗證時不返回確認(rèn)頁面,,只能獲取OPENID
****************************************************/
public function wxOauthBase($redirectUrl,$state = "",$appId = NULL){
$appId
= is_null($appId) ? self::appId : $appId;
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect";
return $url;
}
/****************************************************
* 微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_userinfo //獲取用戶完整信息
****************************************************/
public function wxOauthUserinfo($redirectUrl,$state = "",$appId = NULL){
$appId
= is_null($appId) ? self::appId : $appId;
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect";
return $url;
}
/****************************************************
* 微信OAUTH跳轉(zhuǎn)指定URL
****************************************************/
public function wxHeader($url){
header("location:".$url);
}
/****************************************************
* 微信通過OAUTH返回頁面中獲取AT信息
****************************************************/
public function wxOauthAccessToken($code,$appId = NULL , $appSecret = NULL){
$appId
= is_null($appId) ? self::appId : $appId;
$appSecret = is_null($appSecret) ? self::appSecret : $appSecret;
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";
$result
= $this->wxHttpsRequest($url);
//print_r($result);
$jsoninfo = json_decode($result, true);
//$access_token = $jsoninfo["access_token"];
return $jsoninfo;
}
/****************************************************
* 微信通過OAUTH的Access_Token的信息獲取當(dāng)前用戶信息 // 只執(zhí)行在snsapi_userinfo模式運行
****************************************************/
public function wxOauthUser($OauthAT,$openId){
$url
= "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN";
$result
= $this->wxHttpsRequest($url);
$jsoninfo = json_decode($result, true);
return $jsoninfo;
}
/****************************************************
* 創(chuàng)建自定義菜單
****************************************************/
public function wxMenuCreate($jsonData){
$wxAccessToken = $this->wxAccessToken();
$url
= "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken;
$result
= $this->wxHttpsRequest($url,$jsonData);
$jsoninfo = json_decode($result, true);
return $jsoninfo;
}
/****************************************************
* 獲取自定義菜單
****************************************************/
public function wxMenuGet(){
$wxAccessToken = $this->wxAccessToken();
$url
= "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken;
$result
= $this->wxHttpsRequest($url);
$jsoninfo = json_decode($result, true);
return $jsoninfo;
}
/****************************************************
* 刪除自定義菜單
****************************************************/
public function wxMenuDelete(){
$wxAccessToken = $this->wxAccessToken();
$url
= "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken;
$result
= $this->wxHttpsRequest($url);
$jsoninfo = json_decode($result, true);
return $jsoninfo;
}
/****************************************************
* 獲取第三方自定義菜單
****************************************************/
public function wxMenuGetInfo(){
$wxAccessToken = $this->wxAccessToken();
$url
= "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken;
$result
= $this->wxHttpsRequest($url);
$jsoninfo = json_decode($result, true);
return $jsoninfo;
}
/*****************************************************
* 生成隨機字符串 - 最長為32位字符串
*****************************************************/
public function wxNonceStr($length = 16, $type = FALSE) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i parameters = $parameters;
return $this->parameters;
}
else{
return array();
}
}
/*******************************************************
* 微信格式化數(shù)組變成參數(shù)格式 - 支持url加密
*******************************************************/
public function wxFormatArray($parameters = NULL, $urlencode = FALSE){
if(is_null($parameters)){
$parameters = $this->parameters;
}
$restr = "";//初始化空
ksort($parameters);//排序參數(shù)
foreach ($parameters as $k => $v){//循環(huán)定制參數(shù)
if (null != $v && "null" != $v && "sign" != $k) {
if($urlencode){//如果參數(shù)需要增加URL加密就增加,不需要則不需要
$v = urlencode($v);
}
$restr .= $k . "=" . $v . "&";//返回完整字符串
}
}
if (strlen($restr) > 0) {//如果存在數(shù)據(jù)則將最后“&”刪除
$restr = substr($restr, 0, strlen($restr)-1);
}
return $restr;//返回字符串
}
/*******************************************************
* 微信MD5簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法]
*******************************************************/
public function wxMd5Sign($content, $privatekey){
try {
if (is_null($privatekey)) {
throw new Exception("財付通簽名key不能為空!");
}
if (is_null($content)) {
throw new Exception("財付通簽名內(nèi)容不能為空");
}
$signStr = $content . "&key=" . $privatekey;
return strtoupper(md5($signStr));
}
catch (Exception $e)
{
die($e->getMessage());
}
}
/*******************************************************
* 微信Sha1簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法]
*******************************************************/
public function wxSha1Sign($content){
try {
if (is_null($content)) {
throw new Exception("簽名內(nèi)容不能為空");
}
//$signStr = $content;
return sha1($content);
}
catch (Exception $e)
{
die($e->getMessage());
}
}
/*******************************************************
* 微信jsApi整合方法 - 通過調(diào)用此方法獲得jsapi數(shù)據(jù)
*******************************************************/
public function wxJsapiPackage(){
$jsapi_ticket = $this->wxJsApiTicket();
// 注意 URL 一定要動態(tài)獲取,不能 hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = $protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
$timestamp = time();
$nonceStr = $this->wxNonceStr();
$signPackage = array(
"jsapi_ticket" => $jsapi_ticket,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url
);
// 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序
$rawString = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
//$rawString = $this->wxFormatArray($signPackage);
$signature = $this->wxSha1Sign($rawString);
$signPackage['signature'] = $signature;
$signPackage['rawString'] = $rawString;
$signPackage['appId'] = self::appId;
return $signPackage;
}
/*******************************************************
* 將數(shù)組解析XML - 微信紅包接口
*******************************************************/
public function wxArrayToXml($parameters = NULL){
if(is_null($parameters)){
$parameters = $this->parameters;
}
if(!is_array($parameters) || empty($parameters)){
die("參數(shù)不為數(shù)組無法解析");
}
$xml = "
4. [代碼]微信JSAPI????

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

Douyin ? ??? ??? ??? https://www.douyin.com/???. ??? ???? ??? ?????. 1. ???? ??; 2. URL https://www.douyin.com/? ??????. 3. "???"??? ???? ??? ??? ??????. 4. ?? ????? ??????. 5. ?? ???. ? ??? ????, ??, ?? ??, ??? ??? ? ?? ???? ??? ?? ??? ???? ?? ??? ??, ?? ???, ??? ?? ?? ? ??? ??? ?? ??? ????.

??? ???? ?? ?? ? ???? ?? ????? ?????. ???? ????? ????? ?? ????? ???? ???? ? ?? ???? ????? ??? ???? ?? ??? ?? ? ????. ???? ????? ??? ??? ???? ??? ???? ??? ???? ? ????. Copy Comics?? ???? ?? ??? ?? ??? ?? ?? ??? ?? ??? ?? ?? ?????, ???? ???? ?? ??? ???, ???? ?? ??? ???? ??? ?? ??? ??? ? ????.

UC ???? ?? QQ ????? ???? ?? ??? ?? ????. 1. UC ????? ???? ? ??? ?????? ??? ???? ????? ?????. 2. QQ ????? Tencent ???? ???? ??? ??? ??? ????? ?????.

2025 ? ?? ?? ???? ??? ?? ???? ??? ??? ?? ??? ? ??? ???? ????? ?? ??, ?? ?? ? ?? ???? ?? ?? ????? ??? ?? 10 ?? ??? ? AI ?? ????? ?? ?????.

?? ???? ?? ?? ?? ?? ? ?? ?? ??? ? Nice Comics? ????? ?? ??? ?? ??? ?????. ?? ?? ??? ?? ? ??? ?? ???? ??? ???? ?? ??? ???? ??????????. ???? ??? ? ????? ???? ??? ?? ??? ?? NES Comics? ???? ???? ??? ?? ?? ? ??? ???? ??? ?? ??? ?? ? ????. ???? ???? ???? ??? ??? ?? ?????, ?? ??? ??? ?? ???? ?? ??? ??????!

Frogman Comics? ???? ??? ?? ??? ???? ??? ??? ?? ??? ?? ?? ?? ?????? ? ?? ????????. ??? ???? ???? ???? ???? ???? ??? ???? ????? ???? ??? ??? ????. ??? ?? ??? ??? ? ???? ??? ??, ??? ? ?? ???? ???? ??? ????? ??? ??? ??? ????. ?? ??? ???? ???? ?? ???? ??? ?? ? ????. ???? ??? ? ????? ???? ?? ?? ???? ?? ?? ??? ??? ?? ?? ??? ?? ??? ?? ? ? ????.

???, ??? ??? ? ?? ???? ???? ???? ?? ??, ????? ??? ?? ???? ???? ???? ???? ?? ??? ????? ??? ??? ???? ?? ? ??? ??? ??? ??? ???? ??? ?? ? ? ????. ??? ?? ??? ?? ??? ??????? ??? ?? ??? ????? ???? ?????? ??? ? ?? ???? ??? ?? ? ??? ???????.

2025b Anhui? ?? ?? ? ???? ??? ????. https://www.marketwebb.co/zh-cn/join?ref=507720986&type=wenzi; Binance Exchange? ??, ??, ??, ??, ?? ? ????? ? 180 ??? ??? ???? ???? ??? ?? ?? ??????. 600 ?? ?? ?? ??? ???? ? ????? 2 ? 7 ?? ?? ?? ? ???? ???? ????.
