加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

分享了PHP实现微信提现功能的具体代码

发布时间:2023-09-25 14:49:14 所属栏目:PHP教程 来源:
导读:本文实例为大家分享了PHP实现微信提现功能的具体代码,供大家参考,具体内容如下

一、实现功能

这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现;&e
本文实例为大家分享了PHP实现微信提现功能的具体代码,供大家参考,具体内容如下

一、实现功能   

这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现; 

官方文档

注意事项:商户打款时是从商户可用余额中减钱,所以确保商户可用余额充足,同时注意官方文档中的付款规则;

//封装提现方法 
 function tixian($money){ 
    $appid = "################";//商户账号appid 
    $secret = "##########";//api密码 
    $mch_id = "#######";//商户号 
    $mch_no = "#######"; 
    $openid="123456789";//授权用户openid 
         
    $arr = array(); 
    $arr['mch_appid'] = $appid; 
    $arr['mchid'] = $mch_id; 
    $arr['nonce_str'] = ugv::randomid(20);//随机字符串,不长于32位 
    $arr['partner_trade_no'] = '1298016501' . date("Ymd") . rand(10000, 90000) . rand(10000, 90000);//商户订单号 
    $arr['openid'] = $openid; 
    $arr['check_name'] = 'NO_CHECK';//是否验证用户真实姓名,这里不验证 
    $arr['amount'] = $money;//付款金额,单位为分 
    $desc = "###提现"; 
    $arr['desc'] = $desc;//描述信息 
    $arr['spbill_create_ip'] = '192.168.0.1';//获取服务器的ip 
    //封装的关于签名的算法 
    $notify = new Notify_pub(); 
    $notify->weixin_app_config = array(); 
    $notify->weixin_app_config['KEY'] = $mch_no; 
  
    $arr['sign'] = $notify->getSign($arr);//签名 
  
    $var = $notify->arrayToXml($arr); 
    $xml = $this->curl_post_ssl('https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers', $var, 30, array(), 1); 
    $rdata = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 
    $return_code = (string)$rdata->return_code; 
    $result_code = (string)$rdata->result_code; 
    $return_code = trim(strtoupper($return_code)); 
    $result_code = trim(strtoupper($result_code)); 
  
    if ($return_code == 'SUCCESS' && $result_code == 'SUCCESS') { 
      $isrr = array( 
        'con'=>'ok', 
        'error' => 0, 
      ); 
    } else { 
      $returnmsg = (string)$rdata->return_msg; 
      $isrr = array( 
        'error' => 1, 
        'errmsg' => $returnmsg, 
      ); 
  
    } 
    return json_encode($isrr); 
}  
//上个方法中用到的curl_post_ssl() 
function curl_post_ssl($url, $vars, $second = 30, $aHeader = array()) 
  { 
    $isdir = "/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, $vars);//全部数据使用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; 
    } 

三、补充

关于具体签名算法,可参考微信官方文档;

简单示范签名算法:

//将要发送的数据整理为$data 
  
ksort($data);//排序 
//使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串 
$str=''; 
foreach($data as $k=>$v) { 
  $str.=$k.'='.$v.'&'; 

//拼接API密钥 
$str.='key='.$secrect; 
$data['sign']=md5($str);//加密 
将数组转换成xml格式(简单方法):

//遍历数组方法 
function arraytoxml($data){ 
  $str='<xml>'; 
  foreach($data as $k=>$v) { 
    $str.='<'.$k.'>'.$v.'</'.$k.'>'; 
  } 
  $str.='</xml>'; 
  return $str; 

将xml格式转换为数组:

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; 

 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章