当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现微信提现功能

发布:smiling 来源: PHP粉丝网  添加日期:2018-10-13 14:06:28 浏览: 评论:0 

本文实例为大家分享了PHP实现微信提现功能的具体代码,供大家参考,具体内容如下

一、实现功能   

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

官方文档

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

  1. //封装提现方法 
  2.  function tixian($money){ 
  3.     $appid = "################";//商户账号appid 
  4.     $secret = "##########";//api密码 
  5.     $mch_id = "#######";//商户号 
  6.     $mch_no = "#######"
  7.     $openid="123456789";//授权用户openid 
  8.          
  9.     $arr = array(); 
  10.     $arr['mch_appid'] = $appid
  11.     $arr['mchid'] = $mch_id
  12.     $arr['nonce_str'] = ugv::randomid(20);//随机字符串,不长于32位 
  13.     $arr['partner_trade_no'] = '1298016501' . date("Ymd") . rand(10000, 90000) . rand(10000, 90000);//商户订单号 
  14.     $arr['openid'] = $openid
  15.     $arr['check_name'] = 'NO_CHECK';//是否验证用户真实姓名,这里不验证 
  16.     $arr['amount'] = $money;//付款金额,单位为分 
  17.     $desc = "###提现"
  18.     $arr['desc'] = $desc;//描述信息 
  19.     $arr['spbill_create_ip'] = '192.168.0.1';//获取服务器的ip 
  20.     //封装的关于签名的算法 
  21.     $notify = new Notify_pub(); 
  22.     $notify->weixin_app_config = array(); 
  23.     $notify->weixin_app_config['KEY'] = $mch_no
  24.   
  25.     $arr['sign'] = $notify->getSign($arr);//签名 
  26.   
  27.     $var = $notify->arrayToXml($arr); 
  28.     $xml = $this->curl_post_ssl('https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'$var, 30, array(), 1); 
  29.     $rdata = simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA); 
  30.     $return_code = (string)$rdata->return_code; 
  31.     $result_code = (string)$rdata->result_code; 
  32.     $return_code = trim(strtoupper($return_code)); 
  33.     $result_code = trim(strtoupper($result_code)); 
  34.   
  35.     if ($return_code == 'SUCCESS' && $result_code == 'SUCCESS') { 
  36.       $isrr = array
  37.         'con'=>'ok'
  38.         'error' => 0, 
  39.       ); 
  40.     } else { 
  41.       $returnmsg = (string)$rdata->return_msg; 
  42.       $isrr = array
  43.         'error' => 1, 
  44.         'errmsg' => $returnmsg
  45.       ); 
  46.   
  47.     } 
  48.     return json_encode($isrr); 
  49. }  
  50. //上个方法中用到的curl_post_ssl() 
  51. function curl_post_ssl($url$vars$second = 30, $aHeader = array()) 
  52.   { 
  53.     $isdir = "/cert/";//证书位置 
  54.   
  55.     $ch = curl_init();//初始化curl 
  56.   
  57.     curl_setopt($ch, CURLOPT_TIMEOUT, $second);//设置执行最长秒数 
  58.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 
  59.     curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页 
  60.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 终止从服务端进行验证 
  61.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);// 
  62.     curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型 
  63.     curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置 
  64.     curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型 
  65.     curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置 
  66.     curl_setopt($ch, CURLOPT_CAINFO, 'PEM'); 
  67.     curl_setopt($ch, CURLOPT_CAINFO, $isdir . 'rootca.pem'); 
  68.     if (count($aHeader) >= 1) { 
  69.       curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);//设置头部 
  70.     } 
  71.     curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 
  72.     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);//全部数据使用HTTP协议中的"POST"操作来发送 
  73.   
  74.     $data = curl_exec($ch);//执行回话 
  75.     if ($data) { 
  76.       curl_close($ch); 
  77.       return $data
  78.     } else { 
  79.       $error = curl_errno($ch); 
  80.       echo "call faild, errorCode:$error\n"
  81.       curl_close($ch); 
  82.       return false; 
  83.     } 

三、补充

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

简单示范签名算法:

  1. //将要发送的数据整理为$data 
  2.   
  3. ksort($data);//排序 
  4. //使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串 
  5. $str=''
  6. foreach($data as $k=>$v) { 
  7.   $str.=$k.'='.$v.'&'
  8. //拼接API密钥 
  9. $str.='key='.$secrect
  10. $data['sign']=md5($str);//加密 

将数组转换成xml格式(简单方法):

  1. //遍历数组方法 
  2. function arraytoxml($data){ 
  3.   $str='<xml>'
  4.   foreach($data as $k=>$v) { 
  5.     $str.='<'.$k.'>'.$v.'</'.$k.'>'
  6.   } 
  7.   $str.='</xml>'
  8.   return $str

将xml格式转换为数组:

  1. function xmltoarray($xml) {  
  2.    //禁止引用外部xml实体  
  3.   libxml_disable_entity_loader(true);  
  4.   $xmlstring = simplexml_load_string($xml'SimpleXMLElement', LIBXML_NOCDATA);  
  5.   $val = json_decode(json_encode($xmlstring),true);  
  6.   return $val

Tags: PHP微信提现

分享到: