php版微信发红包接口用法示例
程序员文章站
2024-02-29 15:03:34
本文实例讲述了php版微信发红包接口用法。分享给大家供大家参考,具体如下:
微信红包功能我相信各位朋友都知道吧,但如果我们要把红包集成到网站那么要如何来做呢?这里...
本文实例讲述了php版微信发红包接口用法。分享给大家供大家参考,具体如下:
微信红包功能我相信各位朋友都知道吧,但如果我们要把红包集成到网站那么要如何来做呢?这里小编就来为各位分享一个php 微信发红包接口测试实例,希望文章能够帮助到各位朋友
下面是一个类,使用方法:
$arr['openid']='ojgttt8of9vdycgsjmachpa-jy1u'; $arr['hbname']="提现申请"; $arr['body']="您的提现申请已经成功"; $arr['fee']=1; $comm = new common_util_pub(); $re = $comm->sendhongbaoto($arr); var_dump($re);
注意证书位置和 商户后台设置的key需要修改.
<?php header("content-type: text/html; charset=utf-8"); class common_util_pub { /** * hbname 红包名称 fee 红包金额 /元 body 内容 openid 微信用户id * @param undefined $arr * * @return */ public function sendhongbaoto($arr){ //$comm = new common_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; } function trimstring($value) { $ret = null; if (null != $value) { $ret = $value; if (strlen($ret) == 0) { $ret = null; } } return $ret; } /** * 作用:产生随机字符串,不长于32位 */ public function createnoncestr( $length = 32 ) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } /** * 作用:格式化参数,签名过程需要使用 */ function formatbizqueryparamap($paramap, $urlencode) { $buff = ""; ksort($paramap); foreach ($paramap as $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; } /** * 作用:生成签名 */ public function getsign($obj) { foreach ($obj as $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 */ public function arraytoxml($arr) { $xml = "<xml>"; foreach ($arr as $key=>$val) { if (is_numeric($val)) { $xml.="<".$key.">".$val."</".$key.">"; } else $xml.="<".$key."><![cdata[".$val."]]></".$key.">"; } $xml.="</xml>"; return $xml; } /** * 作用:将xml转为array */ public function xmltoarray($xml) { //将xml转为array $array_data = json_decode(json_encode(simplexml_load_string($xml, 'simplexmlelement', libxml_nocdata)), true); return $array_data; } public function wxhttpsrequestpem( $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 "call faild, errorcode:$error\n"; curl_close($ch); return false; } } } ?>
更多关于php相关内容感兴趣的读者可查看本站专题:《php微信开发技巧汇总》、《php编码与转码操作技巧汇总》、《php网络编程技巧总结》、《php基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家php程序设计有所帮助。