如今是微信时代啦。很多网站都添加微信红包api接口class
PHP网站如何实现微信红包api,当然有的cms网站提供了红包接口插件,但都是付费的,
最好自定义源代码。
至于开发微信红包api接口使用哪种编程语言,有些程序员喜欢使用Java开发,代码如:import Java
这里介绍使用PHP编程语言开发。
微信红包api代码如下:
<?php
/********************************************************
*
@author Kyler You <QQ:2444756311>
*
@link
http://mp.weixin.qq.com/wiki/home/index.html
*
@version 2.0.1
* @uses $wxApi = new WxApi();
*
@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"call faild, 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;
}
}
代码完毕,编译上传即可。