//企业向个人付款
public function payToUser() {
$openid = ; //获取用户openid
//微信付款到个人的接口
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
$params["mch_appid"] = ' '; //公众账号appid
$params["mchid"] = ' '; //商户号 微信支付平台账号
$params["nonce_str"] = $this->nonce_str(); //随机字符串
$params["partner_trade_no"] = time().rand(1111111,9999999); //商户订单号
$params["amount"] = intval($info['price']*100); //金额
$params["desc"] = '余额提现'; //企业付款描述
$params["openid"] = $openid; //用户openid
$params["check_name"] = 'NO_CHECK'; //不检验用户姓名
$params['spbill_create_ip'] = ''; //获取IP 服务器IP
//生成签名(签名算法后面详细介绍)
$str = 'amount=' . $params["amount"] . '&check_name=' . $params["check_name"] . '&desc=' . $params["desc"] . '&mch_appid=' . $params["mch_appid"] . '&mchid=' . $params["mchid"] . '&nonce_str=' . $params["nonce_str"] . '&openid=' . $params["openid"] . '&partner_trade_no=' . $params["partner_trade_no"] . '&spbill_create_ip=' . $params['spbill_create_ip'] . '&key= 商户平台获取';
//md5加密 转换成大写
$sign = strtoupper(md5($str));
$params["sign"] = $sign; //签名
$xml = $this->arrayToXml($params);
$success = $this->curl_post_ssl($url, $xml);
$post_data = $this->xml($success);
if($post_data['return_code'] == 'SUCCESS' && $post_data['result_code'] == 'SUCCESS'){
//提现成功 写自己的逻辑
}
return json_encode($post_data);
}
/**
* 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;
}
//使用证书,以post方式提交xml到对应的接口url
/**
* 作用:使用证书,以post方式提交xml到对应的接口url
*/
function curl_post_ssl($url, $vars, $second = 30) {
$ch = curl_init();
//超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//以下两种方式需选择一种
/* * ***** 此处必须为文件服务器根目录绝对路径 不可使用变量代替******** */
curl_setopt($ch, CURLOPT_SSLCERT, "apiclient_cert.pem");
curl_setopt($ch, CURLOPT_SSLKEY, "apiclient_key.pem");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
$data = curl_exec($ch);
if ($data) {
curl_close($ch);
// dump($data);
return $data;
} else {
$error = curl_errno($ch);
// echo "call faild, errorCode:$error\n";
curl_close($ch);
return false;
}
}
//随机32位字符串
private function nonce_str()
{
$result = '';
$str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';
for($i=0;$i<32;$i++){
$result .= $str[rand(0,48)];
}
return $result;
}
//签名 $data要先排好顺序
private function sign($data)
{
$stringA = '';
foreach($data as $key=>$value){
if(!$value) continue;
if($stringA) $stringA.='&'.$key."=".$value;
else $stringA = $key."=".$value;
}
$wx_key = 'tiaoxin2018kuaiyou2018keji091100';
$stringSignTemp = $stringA.'&key='.$wx_key;
return strtoupper(md5($stringSignTemp));
}
//获取xml
private function xml($xml){
if(!$xml){
return false;
}
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $data;
}