/** * [企业付款到零钱] * @param [type] $amount [发送的金额(分)目前发送金额不能少于1元] * @param [type] $re_openid [发送人的 openid] * @param string $desc [企业付款描述信息 (必填)] * @param string $check_name [收款用户姓名 (选填)] * @return [type] [description] * @time 2018/ */ public function Paymentmoneysmagr(){ $money = '1';//提现金额 $total_amount = (100) * $money; //以分为单位 $data=array( 'mch_appid'=>'',//商户账号appid 'mchid'=> '',//商户号 'nonce_str'=>createNoncestr(),//随机字符串 'partner_trade_no'=>date('YmdHis').rand(1000, 9999),//商户订单号 'openid'=> '',//用户openid 'check_name'=>'NO_CHECK',//校验用户姓名选项, 're_user_name'=> '王',//收款用户姓名 'amount'=>$total_amount,//金额 'desc'=> '描述',//企业付款描述信息 'spbill_create_ip'=> '127.0.0.1',//Ip地址 ); //生成签名算法 $secrect_key='';///这个就是个API密码。MD5 32位。 $data=array_filter($data); ksort($data); $str=''; foreach($data as $k=>$v) { $str.=$k.'='.$v.'&'; } $str.='key='.$secrect_key; //最后MD5转大写 $data['sign']=strtoupper(md5($str)); //生成签名算法 $xml=arraytoxml($data); $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //调用接口 $res=curl_post_ssl($url,$xml); //返回来的结果是xml,最后转换成数组 $return=xmltoarray($res); //如果返回来SUCCESS,则发生成功,处理自己的逻辑 echo $return; }
/** * [curl_post_ssl 发送curl_post数据] * @param [type] $url [发送地址] * @param [type] $xmldata [发送文件格式] * @param [type] $second [设置执行最长秒数] * @param [type] $aHeader [设置头部] * @return [type] [description] */ function curl_post_ssl($url, $postData) { if (is_array($postData)) { $postData = http_build_query($postData); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数 //https请求 不验证证书和host 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,getcwd().'/apiclient_cert.pem'); //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem'); $data = curl_exec($ch); // $error = curl_error($ch); curl_close($ch); return $data; }
/** * [createNoncestr 生成随机字符串] * @param integer $length [长度] * @return [type] [字母大小写加数字] */ function createNoncestr($length =32){ $nonce = substr(md5(time()), 0, $length);//md5加密,time()当前时间戳 $nonce_str = strtoupper($nonce); return $nonce_str; }
/** * [arraytoxml 将数组转换成xml格式(简单方法):] * @param [type] $data [数组] * @return [type] [array 转 xml] */ function arraytoxml($data){ $str='<xml>'; foreach($data as $k=>$v) { $str.='<'.$k.'>'.$v.'</'.$k.'>'; } $str.='</xml>'; return $str; }
/** * [xmltoarray xml格式转换为数组] * @param [type] $xml [xml] * @return [type] [xml 转化为array] */ function xmltoarray($xml) { //禁止引用外部xml实体 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $val = json_decode(json_encode($xmlstring),true); return $val; }