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

PHP APP微信提现接口代码

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-30 12:00:07 浏览: 评论:0 

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

之前分享了微信支付接口、现在给大家分享一下APP提现的接口。

提现必须得用双向证书、所以大家一定要在微信的商户平台找到相应的地方去设置、因为我做这个提现已经有一段时间了、所以设置微信商户平台的那几个地方没有图的情况、也说不清楚、下次再做提现的时候、给大家分享如何设置商户平台那几个地方、不是很难、下面贴代码

  1. <?php 
  2. namespace Home\Controller; 
  3. use Think\Controller; 
  4. class TixianController extends Controller{ 
  5.  
  6.   //高级功能-》开发者模式-》获取 
  7.   private $app_id1 = '';   //appid 
  8.   private $app_secret1 = ''//secreat 
  9.   private $apikey1 = ''//支付秘钥 
  10.   private $mchid1 = 's';    //商户号 
  11.     
  12.     private $app_id=null; 
  13.     private $app_secret=null; 
  14.     private $apikey=null; 
  15.     private $mchid=null; 
  16.      
  17.      
  18.   public $error=0; 
  19.   public $state = ''
  20.   //金额,需在实例化时传入 
  21.   public $amount = '0'
  22.   //用户订单号,需在实例化时传入 
  23.   public $order_sn = ''
  24.   //用户openid,需在实例化时传入 
  25.   public $openid = ''
  26.     
  27.     
  28.  
  29.   //微信提现操作接口-------》 
  30.   public function actionAct_tixian() 
  31.   { 
  32.      
  33.    $this->state=md5(uniqid(rand(), TRUE)); 
  34.    $this->amount=I('amount');//设置POST过来钱数 
  35.    $this->order_sn=rand(100,999).date('YmdHis'); //随机数可以作为单号 
  36.    $this->openid= I('openid'); //设置获取POST过来用户的OPENID 
  37.     $user_id = I('user_id'); 
  38.  
  39.    $this->app_id=$this->app_id1; 
  40.    $this->app_secret=$this->app_secret1; 
  41.    $this->apikey=$this->apikey1; 
  42.    $this->mchid=$this->mchid1; 
  43.    $xml=$this->tiXianAction(); 
  44.    $result=simplexml_load_string($xml); 
  45.      
  46.    if($result->return_code=='SUCCESS' && $result->result_code=='SUCCESS') { 
  47.  
  48.         $cash = D('cash'); 
  49.         $data['user_id'] = $user_id
  50.         $data['amount'] = $this->amount; 
  51.         $res = $cash->where('user_id="'.$user_id.'"')->find(); 
  52.         if($res){ 
  53.           $res2 = $cash->where('user_id="'.$user_id.'"')->setInc('amount',$this->amount); 
  54.           $res4 = D('member')->where('user_id="'.$user_id.'"')->setDec('user_balance',$this->amount); 
  55.         }else
  56.           $res3 = $cash->add($data); 
  57.         } 
  58.  
  59.       $output = array('code' => 1, 'data' => $result->result_code, 'info' => '提现成功'); 
  60.       exit(json_encode($output)); 
  61.    }else
  62.  
  63.       $output = array('code' => 2, 'data' => $xml'info' => '提现失败'); 
  64.       exit(json_encode($output)); 
  65.    } 
  66.   } 
  67.   /** 
  68.   * 提现接口操作,控制器调用 
  69.   * @param $openid 用户openid 唯一标示 
  70.   * @return 
  71.   */ 
  72.   //提现接口操作 
  73.   public function tiXianAction(){ 
  74.    //获取xml数据 
  75.    $data=$this->getdataXml($this->openid); 
  76.    $ch = curl_init (); 
  77.    //接口地址 
  78.    $MENU_URL="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"
  79.  
  80.    curl_setopt ( $ch, CURLOPT_URL, $MENU_URL ); 
  81.    curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" ); 
  82.    curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); 
  83.    curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); 
  84.  
  85.    //证书地址,微信支付下面 
  86.  
  87.     curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); 
  88.     curl_setopt($ch,CURLOPT_SSLCERT, 'C:\web\www\Home\wx_pay\apiclient_cert.pem'); //证书这块大家把文件放到哪都行、 
  89.     curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); 
  90.     curl_setopt($ch,CURLOPT_SSLKEY, 'C:\web\www\Home\wx_pay\apiclient_key.pem');//注意证书名字千万别写错、 
  91.  
  92.    //$zs1=dirname(dirname(__FILE__)).'\wx_pay\apiclient_cert.pem'; 
  93.    //$zs2=dirname(dirname(__FILE__)).'\wx_pay\apiclient_key.pem'; 
  94.    //show_bug($zs1); 
  95.  
  96.    //curl_setopt($ch,CURLOPT_SSLCERT,$zs1); 
  97.    //curl_setopt($ch,CURLOPT_SSLKEY,$zs2); 
  98.    // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; 
  99.    // Windows NT 5.0)'); 
  100.    //curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 ); 
  101.    curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 ); 
  102.    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); 
  103.    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); 
  104.    $info = curl_exec ( $ch ); 
  105.     //返回结果 
  106.     if($info){ 
  107.       curl_close($ch); 
  108.       return $info
  109.     } else { 
  110.       $error = curl_errno($ch); 
  111.       curl_close($ch); 
  112.       return "curl出错,错误码:$error"
  113.     } 
  114.   } 
  115.   /** 
  116.   * 获取数据封装为数组 
  117.   * @param $openid 用户openid 唯一标示 
  118.   * @return xml 
  119.   */ 
  120.  
  121.   private function getdataXml($openid){ 
  122.    //封装成数据 
  123.    $dataArr=array
  124.      'amount'=>$this->amount*100,//金额(以分为单位,必须大于100) 
  125.      'check_name'=>'NO_CHECK',//校验用户姓名选项,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功) 
  126.      'desc'=>'提现',//描述 
  127.      'mch_appid'=>$this->app_id, 
  128.      'mchid'=>$this->mchid,//商户号 
  129.      'nonce_str'=>rand(100000, 999999),//不长于32位的随机数 
  130.      'openid'=>$openid,//用户唯一标识 
  131.      'partner_trade_no'=>$this->order_sn,//商户订单号 
  132.      're_user_name'=>'',//用户姓名,check_name为NO_CHECK时为可选项 
  133.      'spbill_create_ip'=>$_SERVER["REMOTE_ADDR"],//服务器ip 
  134.    ); 
  135.    //获取签名 
  136.    $sign=$this->getSign($dataArr); 
  137.    //xml数据 
  138.    $data="<xml> 
  139.      <mch_appid>".$dataArr['mch_appid']."</mch_appid> 
  140.      <mchid>".$dataArr['mchid']."</mchid> 
  141.      <nonce_str>".$dataArr['nonce_str']."</nonce_str> 
  142.      <partner_trade_no>".$dataArr['partner_trade_no']."</partner_trade_no> 
  143.      <openid>".$dataArr['openid']."</openid> 
  144.      <check_name>".$dataArr['check_name']."</check_name> 
  145.      <re_user_name>".$dataArr['re_user_name']."</re_user_name> 
  146.      <amount>".$dataArr['amount']."</amount> 
  147.      <desc>".$dataArr['desc']."</desc> 
  148.      <spbill_create_ip>".$dataArr['spbill_create_ip']."</spbill_create_ip> 
  149.      <sign>".$sign."</sign> 
  150.      </xml>"; 
  151.    return $data
  152.  
  153.   } 
  154.   /** 
  155.   *   作用:格式化参数,签名过程需要使用 
  156.   */ 
  157.   private function formatBizQueryParaMap($paraMap$urlencode
  158.   { 
  159.  
  160.    $buff = ""
  161.    ksort($paraMap); 
  162.    foreach ($paraMap as $k => $v
  163.    { 
  164.      if($v){ 
  165.       if($urlencode
  166.       { 
  167.         $v = urlencode($v); 
  168.       } 
  169.  
  170.       $buff .= $k . "=" . $v . "&"
  171.      } 
  172.  
  173.    } 
  174.    $reqPar=NULL; 
  175.    if (strlen($buff) > 0) 
  176.    { 
  177.      $reqPar = substr($buff, 0, strlen($buff)-1); 
  178.    } 
  179.  
  180.    return $reqPar
  181.   } 
  182.  
  183.   /** 
  184.   *   作用:生成签名 
  185.   */ 
  186.   private function getSign($Obj
  187.   { 
  188.  
  189.    foreach ($Obj as $k => $v
  190.    { 
  191.      $Parameters[$k] = $v
  192.    } 
  193.    //签名步骤一:按字典序排序参数 
  194.    ksort($Parameters); 
  195.    $String = $this->formatBizQueryParaMap($Parameters, false); 
  196.    //echo '【string1】'.$String.'</br>'; 
  197.    //签名步骤二:在string后加入KEY 
  198.    $String = $String."&key=".$this->apikey; 
  199.    //echo "【string2】".$String."</br>"; 
  200.    //签名步骤三:MD5加密 
  201.    $String = md5($String); 
  202.    //echo "【string3】 ".$String."</br>"; 
  203.    //签名步骤四:所有字符转为大写 
  204.    $result_ = strtoupper($String); 
  205.    //echo "【result】 ".$result_."</br>"; 
  206.    return $result_
  207.   } 
  208.   //----------- 
  209.   private function http($url$method='POST'$postfields = null, $headers = array()) 
  210.   { 
  211.    header("Content-Type:text/html;charset=utf-8"); 
  212.    $ch = curl_init(); 
  213.    /* Curl settings */ 
  214.    curl_setopt($ch, CURLOPT_URL, $url); 
  215.    curl_setopt($ch, CURLOPT_POSTFIELDS, ""); 
  216.    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  217.    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts 
  218.    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
  219.    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
  220.    switch ($method){ 
  221.      case 'POST'
  222.       curl_setopt($ch,CURLOPT_POST, true); 
  223.       break
  224.    } 
  225.    curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); 
  226.    curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
  227.    $response = curl_exec($ch); 
  228.    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //返回请求状态码 
  229.    curl_close($ch); 
  230.    return array($http_code$response); 
  231.   } 
  232.  
  233. }

Tags: PHP微信提现 APP微信提现

分享到: