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程序设计有所帮助。