찾다
php教程PHP源码微信红包接口API - 拓展微信公众平台通用接口API(PHP版)

微信API接口,微信红包支持,JSAPI的动态参数接口支持

<?php
    /********************************************************
     *		@author Kyler You*		@link http://mp.weixin.qq.com/wiki/home/index.html
     *		@version 2.0.1
     *		@uses $wxApi = new WxApi();
     *		@package 微信API接口 陆续会继续进行更新
     ********************************************************/

    class WxApi {
        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;
        }

        /****************************************************
         *  微信带证书提交数据 - 微信红包使用
         ****************************************************/

        public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){
                $ch = curl_init();
                //超时时间
                curl_setopt($ch,CURLOPT_TIMEOUT,$second);
                curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
                //这里设置代理,如果有的话
                //curl_setopt($ch,CURLOPT_PROXY, &#39;10.206.30.98&#39;);
                //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文件
                //默认格式为PEM,可以注释
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
                curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/apiclient_cert.pem&#39;);
                //默认格式为PEM,可以注释
                curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
                curl_setopt($ch,CURLOPT_SSLKEY,getcwd().&#39;/apiclient_key.pem&#39;);

                curl_setopt($ch,CURLOPT_CAINFO,&#39;PEM&#39;);
                curl_setopt($ch,CURLOPT_CAINFO,getcwd().&#39;/rootca.pem&#39;);

                //第二种方式,两个文件合成一个.pem文件
                //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/all.pem&#39;);

                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;
                //echo $appId,$appSecret;
                $url 			= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
                $result 		= $this->wxHttpsRequest($url);
                //print_r($result);
                $jsoninfo 		= json_decode($result, true);
                $access_token 	= $jsoninfo["access_token"];
                return $access_token;
        }

        /****************************************************
         *	微信通过OPENID获取用户信息,返回数组
         ****************************************************/

        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;
        }

        /****************************************************
         *	微信通过指定模板信息发送给指定用户,发送完成后返回指定JSON数据
         ****************************************************/

        public function wxSendTemplate($jsonData){
                $wxAccessToken 	= $this->wxAccessToken();
                $url			= "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$wxAccessToken;
                $result 		= $this->wxHttpsRequest($url,$jsonData);
                return $result;
        }

        /****************************************************
         *      发送自定义的模板消息
         ****************************************************/

        public function wxSetSend($touser, $template_id, $url, $data, $topcolor = &#39;#7B68EE&#39;){
                $template = array(
                        &#39;touser&#39; => $touser,
                        &#39;template_id&#39; => $template_id,
                        &#39;url&#39; => $url,
                        &#39;topcolor&#39; => $topcolor,
                        &#39;data&#39; => $data
                );
                $jsonData = json_encode($template);
                $result = $this->wxSendTemplate($jsonData);
                return $result;
        }

        /****************************************************
         *	微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_base //验证时不返回确认页面,只能获取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;
        }

        /****************************************************
         *	微信设置OAUTH跳转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跳转指定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的信息获取当前用户信息 // 只执行在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;			
        }
        
        /*****************************************************
         *      生成随机字符串 - 最长为32位字符串
         *****************************************************/
        public function wxNonceStr($length = 16, $type = FALSE) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $str = "";
            for ($i = 0; $i < $length; $i++) {
              $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
            }
            if($type == TRUE){
                return strtoupper(md5(time() . $str));
            }
            else {
                return $str;
            }
        }
        
        /*******************************************************
         *      微信商户订单号 - 最长28位字符串
         *******************************************************/
        
        public function wxMchBillno($mchid = NULL) {
            if(is_null($mchid)){
                if(self::mchid == "" || is_null(self::mchid)){
                    $mchid = time();
                }
                else{
                    $mchid = self::mchid;
                }
            }
            else{
                $mchid = substr(addslashes($mchid),0,10);
            }
            return date("Ymd",time()).time().$mchid;
        }
        
        /*******************************************************
         *      微信格式化数组变成参数格式 - 支持url加密
         *******************************************************/       
        
        public function wxSetParam($parameters){
            if(is_array($parameters) && !empty($parameters)){
                $this->parameters = $parameters;
                return $this->parameters;
            }
            else{
                return array();
            }
        }
        
        /*******************************************************
         *      微信格式化数组变成参数格式 - 支持url加密
         *******************************************************/
        
	public function wxFormatArray($parameters = NULL, $urlencode = FALSE){
            if(is_null($parameters)){
                $parameters = $this->parameters;
            }
            $restr = "";//初始化空
            ksort($parameters);//排序参数
            foreach ($parameters as $k => $v){//循环定制参数
                if (null != $v && "null" != $v && "sign" != $k) {
                    if($urlencode){//如果参数需要增加URL加密就增加,不需要则不需要
                        $v = urlencode($v);
                    }
                    $restr .= $k . "=" . $v . "&";//返回完整字符串
                }
            }
            if (strlen($restr) > 0) {//如果存在数据则将最后“&”删除
                $restr = substr($restr, 0, strlen($restr)-1);
            }
            return $restr;//返回字符串
	}
        
        /*******************************************************
         *      微信MD5签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]
         *******************************************************/
        public function wxMd5Sign($content, $privatekey){
	    try {
                if (is_null($key)) {
                    throw new Exception("财付通签名key不能为空!");
                }
                if (is_null($content)) {
                    throw new Exception("财付通签名内容不能为空");
                }
                $signStr = $content . "&key=" . $key;
                return strtoupper(md5($signStr));
            }
            catch (Exception $e)
            {
                die($e->getMessage());
            }
        }
        
        /*******************************************************
         *      微信Sha1签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]
         *******************************************************/
        public function wxSha1Sign($content, $privatekey){
	    try {
                if (is_null($key)) {
                    throw new Exception("财付通签名key不能为空!");
                }
                if (is_null($content)) {
                    throw new Exception("财付通签名内容不能为空");
                }
                $signStr = $content . "&key=" . $key;
                return strtoupper(sha1($signStr));
            }
            catch (Exception $e)
            {
                die($e->getMessage());
            }
        }

        /*******************************************************
         *      将数组解析XML - 微信红包接口
         *******************************************************/
        
	public function wxArrayToXml($parameters = NULL){
            if(is_null($parameters)){
                $parameters = $this->parameters;
            }
            
            if(!is_array($parameters) || empty($parameters)){
                die("参数不为数组无法解析");
            }
            
            $xml = "";
            foreach ($arr as $key=>$val)
            {
                if (is_numeric($val))
                {
                    $xml.="".$val.""; 
                }
                else
                    $xml.="";  
            }
            $xml.="";
            return $xml; 
        }
        
    }

                   

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는