PHP版微信公众平台红包API
重写了一下PHP下面的微信API接口,
微信红包支持,JSAPI的动态参数接口支持
http://git.oschina.net/youkuiyuan/yky_test/blob/master/class/wxapi.class.php
微信API类-增加红包支持
<?php
/********************************************************
*@authorKylerYou<QQ:2444756311>
*@linkhttp://mp.weixin.qq.com/wiki/home/index.html
*@version2.0.1
*@uses$wxApi=newWxApi();
*@package微信API接口陆续会继续进行更新
********************************************************/
classWxApi{
constappId="";
constappSecret="";
constmchid="";//商户号
constprivatekey="";//私钥
public$parameters=array();
publicfunction__construct(){
}
/****************************************************
*微信提交API方法,返回微信指定JSON
****************************************************/
publicfunctionwxHttpsRequest($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;
}
/****************************************************
*微信带证书提交数据-微信红包使用
****************************************************/
publicfunctionwxHttpsRequestPem($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,'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文件
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem');
//默认格式为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"callfaild,errorCode:$error\n";
curl_close($ch);
returnfalse;
}
}
/****************************************************
*微信获取AccessToken返回指定微信公众号的at信息
****************************************************/
publicfunctionwxAccessToken($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获取用户信息,返回数组
****************************************************/
publicfunctionwxGetUser($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数据
****************************************************/
publicfunctionwxSendTemplate($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;
}
/****************************************************
*发送自定义的模板消息
****************************************************/
publicfunctionwxSetSend($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;
}
/****************************************************
*微信设置OAUTH跳转URL,返回字符串信息-SCOPE=snsapi_base//验证时不返回确认页面,只能获取OPENID
****************************************************/
publicfunctionwxOauthBase($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//获取用户完整信息
****************************************************/
publicfunctionwxOauthUserinfo($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
****************************************************/
publicfunctionwxHeader($url){
header("location:".$url);
}
/****************************************************
*微信通过OAUTH返回页面中获取AT信息
****************************************************/
publicfunctionwxOauthAccessToken($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模式运行
****************************************************/
publicfunctionwxOauthUser($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位字符串
*****************************************************/
publicfunctionwxNonceStr($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){
returnstrtoupper(md5(time().$str));
}
else{
return$str;
}
}
/*******************************************************
*微信商户订单号-最长28位字符串
*******************************************************/
publicfunctionwxMchBillno($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);
}
returndate("Ymd",time()).time().$mchid;
}
/*******************************************************
*微信格式化数组变成参数格式-支持url加密
*******************************************************/
publicfunctionwxSetParam($parameters){
if(is_array($parameters)&&!empty($parameters)){
$this->parameters=$parameters;
return$this->parameters;
}
else{
returnarray();
}
}
/*******************************************************
*微信格式化数组变成参数格式-支持url加密
*******************************************************/
publicfunctionwxFormatArray($parameters=NULL,$urlencode=FALSE){
if(is_null($parameters)){
$parameters=$this->parameters;
}
$restr="";//初始化空
ksort($parameters);//排序参数
foreach($parametersas$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方法]
*******************************************************/
publicfunctionwxMd5Sign($content,$privatekey){
try{
if(is_null($key)){
thrownewException("财付通签名key不能为空!");
}
if(is_null($content)){
thrownewException("财付通签名内容不能为空");
}
$signStr=$content."&key=".$key;
returnstrtoupper(md5($signStr));
}
catch(Exception$e)
{
die($e->getMessage());
}
}
/*******************************************************
*微信Sha1签名生成器-需要将参数数组转化成为字符串[wxFormatArray方法]
*******************************************************/
publicfunctionwxSha1Sign($content,$privatekey){
try{
if(is_null($key)){
thrownewException("财付通签名key不能为空!");
}
if(is_null($content)){
thrownewException("财付通签名内容不能为空");
}
$signStr=$content."&key=".$key;
returnstrtoupper(sha1($signStr));
}
catch(Exception$e)
{
die($e->getMessage());
}
}
/*******************************************************
*将数组解析XML-微信红包接口
*******************************************************/
publicfunctionwxArrayToXml($parameters=NULL){
if(is_null($parameters)){
$parameters=$this->parameters;
}
if(!is_array($parameters)||empty($parameters)){
die("参数不为数组无法解析");
}
$xml="<xml>";
foreach($arras$key=>$val)
{
if(is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";
}
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
$xml.="</xml>";
return$xml;
}
}
后期还是会增加在一起的把这个CLASS做起来,网上资源很多,但是都是有一定基础的人去看看改改可以,对于没有接触刚刚接触的新手还是需要给予支持的。帮助用户屡屡思路。
以上所述就是本文的全部内容了,希望大家能够喜欢。