本文实例讲述了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需要修改.
<?phpheader("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
";curl_close($ch);return false;}}}?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。