当前位置: 移动技术网 > IT编程>开发语言>PHP > PHP APP微信提现接口代码

PHP APP微信提现接口代码

2018年10月08日  | 移动技术网IT编程  | 我要评论

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

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

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

<?php
namespace home\controller;
use think\controller;
class tixiancontroller extends controller{

  //高级功能-》开发者模式-》获取
  private $app_id1 = '';   //appid
  private $app_secret1 = ''; //secreat
  private $apikey1 = ''; //支付秘钥
  private $mchid1 = 's';    //商户号
  
    private $app_id=null;
    private $app_secret=null;
    private $apikey=null;
    private $mchid=null;
   
   
  public $error=0;
  public $state = '';
  //金额,需在实例化时传入
  public $amount = '0';
  //用户订单号,需在实例化时传入
  public $order_sn = '';
  //用户openid,需在实例化时传入
  public $openid = '';
  
  

  //微信提现操作接口-------》
  public function actionact_tixian()
  {
   
   $this->state=md5(uniqid(rand(), true));
   $this->amount=i('amount');//设置post过来钱数
   $this->order_sn=rand(100,999).date('ymdhis'); //随机数可以作为单号
   $this->openid= i('openid'); //设置获取post过来用户的openid
    $user_id = i('user_id');

   $this->app_id=$this->app_id1;
   $this->app_secret=$this->app_secret1;
   $this->apikey=$this->apikey1;
   $this->mchid=$this->mchid1;
   $xml=$this->tixianaction();
   $result=simplexml_load_string($xml);
   
   if($result->return_code=='success' && $result->result_code=='success') {

        $cash = d('cash');
        $data['user_id'] = $user_id;
        $data['amount'] = $this->amount;
        $res = $cash->where('user_id="'.$user_id.'"')->find();
        if($res){
          $res2 = $cash->where('user_id="'.$user_id.'"')->setinc('amount',$this->amount);
          $res4 = d('member')->where('user_id="'.$user_id.'"')->setdec('user_balance',$this->amount);
        }else{
          $res3 = $cash->add($data);
        }

      $output = array('code' => 1, 'data' => $result->result_code, 'info' => '提现成功');
      exit(json_encode($output));
   }else{

      $output = array('code' => 2, 'data' => $xml, 'info' => '提现失败');
      exit(json_encode($output));
   }
  }
  /**
  * 提现接口操作,控制器调用
  * @param $openid 用户openid 唯一标示
  * @return
  */
  //提现接口操作
  public function tixianaction(){
   //获取xml数据
   $data=$this->getdataxml($this->openid);
   $ch = curl_init ();
   //接口地址
   $menu_url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

   curl_setopt ( $ch, curlopt_url, $menu_url );
   curl_setopt ( $ch, curlopt_customrequest, "post" );
   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, 'c:\web\www\home\wx_pay\apiclient_cert.pem'); //证书这块大家把文件放到哪都行、
    curl_setopt($ch,curlopt_sslkeytype,'pem');
    curl_setopt($ch,curlopt_sslkey, 'c:\web\www\home\wx_pay\apiclient_key.pem');//注意证书名字千万别写错、

   //$zs1=dirname(dirname(__file__)).'\wx_pay\apiclient_cert.pem';
   //$zs2=dirname(dirname(__file__)).'\wx_pay\apiclient_key.pem';
   //show_bug($zs1);

   //curl_setopt($ch,curlopt_sslcert,$zs1);
   //curl_setopt($ch,curlopt_sslkey,$zs2);
   // curl_setopt($ch, curlopt_useragent, 'mozilla/5.0 (compatible; msie 5.01;
   // windows nt 5.0)');
   //curl_setopt ( $ch, curlopt_followlocation, 1 );
   curl_setopt ( $ch, curlopt_autoreferer, 1 );
   curl_setopt ( $ch, curlopt_postfields, $data );
   curl_setopt ( $ch, curlopt_returntransfer, true );
   $info = curl_exec ( $ch );
    //返回结果
    if($info){
      curl_close($ch);
      return $info;
    } else {
      $error = curl_errno($ch);
      curl_close($ch);
      return "curl出错,错误码:$error";
    }
  }
  /**
  * 获取数据封装为数组
  * @param $openid 用户openid 唯一标示
  * @return xml
  */

  private function getdataxml($openid){
   //封装成数据
   $dataarr=array(
     'amount'=>$this->amount*100,//金额(以分为单位,必须大于100)
     'check_name'=>'no_check',//校验用户姓名选项,no_check:不校验真实姓名 force_check:强校验真实姓名(未实名认证的用户会校验失败,无法转账)option_check:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
     'desc'=>'提现',//描述
     'mch_appid'=>$this->app_id,
     'mchid'=>$this->mchid,//商户号
     'nonce_str'=>rand(100000, 999999),//不长于32位的随机数
     'openid'=>$openid,//用户唯一标识
     'partner_trade_no'=>$this->order_sn,//商户订单号
     're_user_name'=>'',//用户姓名,check_name为no_check时为可选项
     'spbill_create_ip'=>$_server["remote_addr"],//服务器ip
   );
   //获取签名
   $sign=$this->getsign($dataarr);
   //xml数据
   $data="<xml>
     <mch_appid>".$dataarr['mch_appid']."</mch_appid>
     <mchid>".$dataarr['mchid']."</mchid>
     <nonce_str>".$dataarr['nonce_str']."</nonce_str>
     <partner_trade_no>".$dataarr['partner_trade_no']."</partner_trade_no>
     <openid>".$dataarr['openid']."</openid>
     <check_name>".$dataarr['check_name']."</check_name>
     <re_user_name>".$dataarr['re_user_name']."</re_user_name>
     <amount>".$dataarr['amount']."</amount>
     <desc>".$dataarr['desc']."</desc>
     <spbill_create_ip>".$dataarr['spbill_create_ip']."</spbill_create_ip>
     <sign>".$sign."</sign>
     </xml>";
   return $data;

  }
  /**
  *   作用:格式化参数,签名过程需要使用
  */
  private function formatbizqueryparamap($paramap, $urlencode)
  {

   $buff = "";
   ksort($paramap);
   foreach ($paramap as $k => $v)
   {
     if($v){
      if($urlencode)
      {
        $v = urlencode($v);
      }

      $buff .= $k . "=" . $v . "&";
     }

   }
   $reqpar=null;
   if (strlen($buff) > 0)
   {
     $reqpar = substr($buff, 0, strlen($buff)-1);
   }

   return $reqpar;
  }

  /**
  *   作用:生成签名
  */
  private function getsign($obj)
  {

   foreach ($obj as $k => $v)
   {
     $parameters[$k] = $v;
   }
   //签名步骤一:按字典序排序参数
   ksort($parameters);
   $string = $this->formatbizqueryparamap($parameters, false);
   //echo '【string1】'.$string.'</br>';
   //签名步骤二:在string后加入key
   $string = $string."&key=".$this->apikey;
   //echo "【string2】".$string."</br>";
   //签名步骤三:md5加密
   $string = md5($string);
   //echo "【string3】 ".$string."</br>";
   //签名步骤四:所有字符转为大写
   $result_ = strtoupper($string);
   //echo "【result】 ".$result_."</br>";
   return $result_;
  }
  //-----------
  private function http($url, $method='post', $postfields = null, $headers = array())
  {
   header("content-type:text/html;charset=utf-8");
   $ch = curl_init();
   /* curl settings */
   curl_setopt($ch, curlopt_url, $url);
   curl_setopt($ch, curlopt_postfields, "");
   curl_setopt($ch, curlopt_returntransfer, true);
   curl_setopt($ch, curlopt_ssl_verifypeer, false); // https请求 不验证证书和hosts
   curl_setopt($ch, curlopt_ssl_verifyhost, false);
   curl_setopt($ch, curlopt_timeout, 30);
   switch ($method){
     case 'post':
      curl_setopt($ch,curlopt_post, true);
      break;
   }
   curl_setopt($ch, curlopt_httpheader,$headers);
   curl_setopt($ch, curlinfo_header_out, true);
   $response = curl_exec($ch);
   $http_code = curl_getinfo($ch, curlinfo_http_code); //返回请求状态码
   curl_close($ch);
   return array($http_code, $response);
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网