php版微信发红包接口用法示例
本文实例讲述了php版微信发红包接口用法。分享给大家供大家参考,具体如下:
微信红包功能我相信各位朋友都知道吧,但如果我们要把红包集成到网站那么要如何来做呢?这里小编就来为各位分享一个php微信发红包接口测试实例,希望文章能够帮助到各位朋友
下面是一个类,使用方法:
$arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U'; $arr['hbname']="提现申请"; $arr['body']="您的提现申请已经成功"; $arr['fee']=1; $comm=newCommon_util_pub(); $re=$comm->sendhongbaoto($arr); var_dump($re);
注意证书位置和商户后台设置的key需要修改.
<?php
header("Content-type:text/html;charset=utf-8");
classCommon_util_pub
{
/**
*hbname红包名称fee红包金额/元body内容openid微信用户id
*@paramundefined$arr
*
*@return
*/
publicfunctionsendhongbaoto($arr){
//$comm=newCommon_util_pub();
$data['mch_id']='120005402';
$data['mch_billno']='120005402'.date("Ymd",time()).date("His",time()).rand(1111,9999);
$data['nonce_str']=self::createNoncestr();
$data['re_openid']=$arr['openid'];
$data['wxappid']='wx8axxxxxbac4905';
$data['nick_name']=$arr['hbname'];
$data['send_name']=$arr['hbname'];
$data['total_amount']=$arr['fee']*100;
$data['min_value']=$arr['fee']*100;
$data['max_value']=$arr['fee']*100;
$data['total_num']=1;
$data['client_ip']=$_SERVER['REMOTE_ADDR'];
$data['act_name']='测试活动';
$data['remark']='备注一下';
$data['wishing']=$arr['body'];
if(!$data['re_openid']){
$rearr['return_msg']='缺少用户openid';
return$rearr;
}
$data['sign']=self::getSign($data);
$xml=self::arrayToXml($data);
//var_dump($xml);
$url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$re=self::wxHttpsRequestPem($xml,$url);
$rearr=self::xmlToArray($re);
return$rearr;
}
functiontrimString($value)
{
$ret=null;
if(null!=$value)
{
$ret=$value;
if(strlen($ret)==0)
{
$ret=null;
}
}
return$ret;
}
/**
*作用:产生随机字符串,不长于32位
*/
publicfunctioncreateNoncestr($length=32)
{
$chars="abcdefghijklmnopqrstuvwxyz0123456789";
$str="";
for($i=0;$i<$length;$i++){
$str.=substr($chars,mt_rand(0,strlen($chars)-1),1);
}
return$str;
}
/**
*作用:格式化参数,签名过程需要使用
*/
functionformatBizQueryParaMap($paraMap,$urlencode)
{
$buff="";
ksort($paraMap);
foreach($paraMapas$k=>$v)
{
if($urlencode)
{
$v=urlencode($v);
}
//$buff.=strtolower($k)."=".$v."&";
$buff.=$k."=".$v."&";
}
$reqPar;
if(strlen($buff)>0)
{
$reqPar=substr($buff,0,strlen($buff)-1);
}
return$reqPar;
}
/**
*作用:生成签名
*/
publicfunctiongetSign($Obj)
{
foreach($Objas$k=>$v)
{
$Parameters[$k]=$v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String=$this->formatBizQueryParaMap($Parameters,false);
//echo'【string1】'.$String.'</br>';
//签名步骤二:在string后加入KEY
$String=$String."&key="."254554sefg4exxxxxxxxs5cds1";//商户后台设置的key
//echo"【string2】".$String."</br>";
//签名步骤三:MD5加密
$String=md5($String);
//echo"【string3】".$String."</br>";
//签名步骤四:所有字符转为大写
$result_=strtoupper($String);
//echo"【result】".$result_."</br>";
return$result_;
}
/**
*作用:array转xml
*/
publicfunctionarrayToXml($arr)
{
$xml="<xml>";
foreach($arras$key=>$val)
{
if(is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";
}
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
$xml.="</xml>";
return$xml;
}
/**
*作用:将xml转为array
*/
publicfunctionxmlToArray($xml)
{
//将XML转为array
$array_data=json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);
return$array_data;
}
publicfunctionwxHttpsRequestPem($vars,$url,$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,dirname(__FILE__).'/hongbao/apiclient_cert.pem');
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/hongbao/apiclient_key.pem');
curl_setopt($ch,CURLOPT_CAINFO,'PEM');
curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/hongbao/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;
}
}
}
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。