有乎-价值、共享、信任

What you care about-value, sharing, trust

微信企业号零钱包打款功能方法

| 阅读:2640 发表时间:2019-09-22 19:52:20 微信

企业微信通过零钱包向会员打款:

<?php
define("APPID", "你的APPID"); // 商户账号appid
define("MCHID", "商户号");  // 商户号
define("SECRECT_KEY", "你的密钥"); //支付密钥签名
define("IP", get_client_ip()); //IP

$money      = floatval($_GET['money']); //金额
$openid     = $_GET['openid'];          //openid
$reusername = $_GET['real_username'];   //真实姓名

$need_force_check = 1; //是否强制认证姓名

$ret = sendMoney(intval($money*100), $openid, '会员提现', $reusername, $need_force_check);
echo $ret;

function sendMoney($amount, $re_openid, $desc='会员提现', $check_name='', $need_force_check=1){
   $total_amount = $amount;
    
   $data=array(
     'mch_appid'=>APPID,//商户账号appid
     'mchid'=> MCHID,//商户号
     'nonce_str'=>createNoncestr(),//随机字符串
     'partner_trade_no'=> date('YmdHis').rand(1000, 9999),//商户订单号
     'openid'=> $re_openid,//用户openid
     're_user_name'=> $check_name,//收款用户姓名
     'amount'=>$total_amount,//金额
     'desc'=> $desc,//企业付款描述信息
     'spbill_create_ip'=> IP,//Ip地址
   );
  
  if($need_force_check){
       $data['check_name'] = 'FORCE_CHECK';   //校验用户姓名选项,
  }else{
       $data['check_name'] = 'NO_CHECK';
  }
   file_put_contents('param.txt',date('Y/m/d H:i:s').PHP_EOL, FILE_APPEND);
  file_put_contents('param.txt', var_export($data, true), FILE_APPEND);
  
  //生成签名算法
  $secrect_key=SECRECT_KEY;///这个就是个API密码。MD5 32位。
  $data=array_filter($data);
  ksort($data);
  $str='';
  foreach($data as $k=>$v) {
   $str.=$k.'='.$v.'&';
  }
  $str.='key='.$secrect_key;
  $data['sign']=md5($str);
  //生成签名算法
  $xml=arraytoxml($data);
  
  $url='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //调用接口
  $res=curl_post_ssl($url,$xml);
 
  $return=xmltoarray($res);
  $responseObj = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
  $res= $responseObj->return_code;
  file_put_contents("wxpay.txt", $responseObj->err_code_des, FILE_APPEND);
  if($responseObj->return_code == 'SUCCESS' && $responseObj->return_msg==''){
      return 1;
  }else{
      return -1;
  }
 }


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;
 }


 function arraytoxml($data){
  $str='<xml>';
  foreach($data as $k=>$v) {
   $str.='<'.$k.'>'.$v.'</'.$k.'>';
  }
  $str.='</xml>';
  return $str;
 }
 

 function createNoncestr($length =32){
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"; 
  $str ="";
 
  for($i=0;$i<$length;$i++){ 
   $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); 
  } 
  return $str;
 }


 function curl_post_ssl($url, $xmldata, $second = 30, $aHeader = array()){
  $isdir = $_SERVER['DOCUMENT_ROOT']."/cert/";//证书位置;绝对路径
 
  $ch = curl_init();//初始化curl
 
  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_SSLCERTTYPE, 'PEM');//证书类型
  curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置
  curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型
  curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置
  curl_setopt($ch, CURLOPT_CAINFO, 'PEM');
  curl_setopt($ch, CURLOPT_CAINFO, $isdir . 'rootca.pem');
  if (count($aHeader) >= 1) {
   curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);//设置头部
  }
  curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xmldata);//全部数据使用HTTP协议中的"POST"操作来发送
 
  $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;
  }
 }


function get_client_ip($type = 0) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($_SERVER['HTTP_X_REAL_IP']){//nginx 代理模式下,获取客户端真实IP
        $ip=$_SERVER['HTTP_X_REAL_IP'];     
    }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {//客户端的ip
        $ip     =   $_SERVER['HTTP_CLIENT_IP'];
    }elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {//浏览当前页面的用户计算机的网关
        $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $pos    =   array_search('unknown',$arr);
        if(false !== $pos) unset($arr[$pos]);
        $ip     =   trim($arr[0]);
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];//浏览当前页面的用户计算机的ip地址
    }else{
        $ip=$_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}
?>
*文章为作者独立观点,不代表【uuuho有乎】的立场
本文由【uuuho有乎】发表并编辑,转载此文章须经作者同意,并请附上出处及本页链接。如有侵权,请联系本站删除。

Who are we?