<?php
//返回随机数函数
function getNonceNum($numLen=16){
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $numLen; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
$nonce_str = getNonceNum();
$appid = "###";
$mch_id = "####";
$body="test";
$ip="###";
$mch_billno = date("Ymd").getNonceNum();
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$param['nonce_str'] = $nonce_str;
$param['mch_billno'] = $mch_billno;
$param['mch_id'] = $mch_id;
$param['wxappid'] = $appid;
$param['send_name'] = "红包测试";
$param['re_openid'] = "####";
$param['total_amount'] = 100;
$param['total_num'] = 1;
$param['wishing'] = "红包祝福语";
$param['client_ip'] = $ip;
$param['act_name'] = "发红包活动名称";
$param['remark'] = "转发文章抢红包";
ksort($param);
$sign_raw = "";
foreach($param as $k => $v){
$sign_raw .= $k."=".$v."&";
}
$sign_raw .= "key=###";
//file_put_contents("sign.raw",$sign_raw);//debug
$sign = strtoupper(md5($sign_raw));
echo $sign;
$xml = "<xml>";
foreach($param as $k => $v){
$xml .= "<$k>$v</$k>";
}
$xml.="<sign>$sign</sign></xml>";
echo $xml;
echo postXmlCurl($xml,$url);
function postXmlCurl($xml, $url, $useCert = true, $second = 30){
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch,CURLOPT_URL, $url);
if(stripos($url,"https://")!==FALSE){
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}else{
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
}
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if($useCert == true){
//设置证书
//使用证书:cert 与 key 分别属于两个.pem文件
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, "../cert/####.pem");
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, "../cert/####.pem");
curl_setopt($ch, CURLOPT_CAINFO, '../cert/rootca.pem');
}
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
//返回结果
if($data){
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
curl_close($ch);
echo "error";
}
}