• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP实现微信提现(企业付款到零钱)

    怎么开通企业付款到零钱?

    有的商户号的产品中心是没有这个功能的,不过,该功能的pid(product id)是5,只要随便进去某一个产品,在地址栏把pid改为5。

    即可进入该功能页面,进行开通,不过要满足条件。

    用户提现代码:

    //用户微信提现
     private function withdrawals_weixin($id){
        $falg = M('withdrawals')->where(['id'=>$id])->find();
        $openid = M('users')->where('user_id', $falg['user_id'])->value('openid');
        $data['openid'] = $openid;
        $data['pay_code'] = $falg['id'].$falg['user_id'];
        $data['desc'] = '提现ID'.$falg['id'];
        if($falg['taxfee'] >= $falg['money']){
          return array('status'=>1, 'msg'=>"提现额度必须大于手续费!" );
        }else{
          $data['money'] = bcsub($falg['money'], $falg['taxfee'], 2);
        }
        include_once PLUGIN_PATH . "payment/weixin/weixin.class.php";
        $weixin_obj = new \weixin();
        $result = $weixin_obj->transfer($data);
       
        return $result;
     }

    其中pay_code在商户号的提现功能是唯一的,所以为了防重放攻击,这个值千万不能用随机数,最好用ID,具有提现记录唯一。

    提现逻辑代码:

    // 微信提现转账
      function transfer($data){
        
        header("Content-type: text/html; charset=utf-8");
        //CA证书及支付信息
       $wxchat['appid'] = WxPayConfig::$appid;
       $wxchat['mchid'] = WxPayConfig::$mchid;
     
       $wxchat['api_cert'] = PLUGIN_PATH.'/payment/weixin/cert/apiclient_cert.pem';
        $wxchat['api_key'] = PLUGIN_PATH.'/payment/weixin/cert/apiclient_key.pem';
        
        // $wxchat['api_ca'] = '/plugins/payment/weixin/cert/rootca.pem';
       $webdata = array(
        'mch_appid' => $wxchat['appid'],
        'mchid'   => $wxchat['mchid'],
        'nonce_str' => md5(time()),
        //'device_info' => '1000',
        'partner_trade_no'=> $data['pay_code'], //商户订单号,需要唯一
        'openid' => $data['openid'],//转账用户的openid
        'check_name'=> 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
        //'re_user_name' => 'jorsh', //收款人用户姓名
        'amount' => $data['money'] * 100, //付款金额单位为分
        'desc'  => $data['desc'],
        'spbill_create_ip' => request()->ip(),
        );
      
       foreach ($webdata as $k => $v) {
       $tarr[] =$k.'='.$v;
        }
     
       sort($tarr);
       $sign = implode($tarr, '');
       $sign .= 'key='.WxPayConfig::$key;
        $webdata['sign']=strtoupper(md5($sign));
        
        $wget = $this->array2xml($webdata);
        
        $pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
     
        $res = $this->http_post($pay_url, $wget, $wxchat);
     
       if(!$res){
       return array('status'=>1, 'msg'=>"Can't connect the server" );
       }
        $content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
        
       if(strval($content->return_code) == 'FAIL'){
       return array('status'=>1, 'msg'=>strval($content->return_msg));
       }
       if(strval($content->result_code) == 'FAIL'){
       return array('status'=>1, 'msg'=>strval($content->err_code),':'.strval($content->err_code_des));
        }
     
       $rdata = array(
        'mch_appid'    => strval($content->mch_appid),
        'mchid'      => strval($content->mchid),
        'device_info'   => strval($content->device_info),
        'nonce_str'    => strval($content->nonce_str),
        'result_code'   => strval($content->result_code),
        'partner_trade_no' => strval($content->partner_trade_no),
        'payment_no'    => strval($content->payment_no),
        'payment_time'   => strval($content->payment_time),
       );
       return $rdata;
     
      }

    其中 PLUGIN_PATH 是一个常量

    define('PLUGIN_PATH', __DIR__ . '/plugins/');
    
    

    定义插件目录

    /**
       * 将一个数组转换为 XML 结构的字符串
       * @param array $arr 要转换的数组
       * @param int $level 节点层级, 1 为 Root.
       * @return string XML 结构的字符串
       */
      function array2xml($arr, $level = 1) {
       $s = $level == 1 ? "xml>" : '';
       foreach($arr as $tagname => $value) {
       if (is_numeric($tagname)) {
        $tagname = $value['TagName'];
        unset($value['TagName']);
       }
       if(!is_array($value)) {
        $s .= "{$tagname}>".(!is_numeric($value) ? '![CDATA[' : '').$value.(!is_numeric($value) ? ']]>' : '')."/{$tagname}>";
       } else {
        $s .= "{$tagname}>" . $this->array2xml($value, $level + 1)."/{$tagname}>";
       }
       }
       $s = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ' ', $s);
       return $level == 1 ? $s."/xml>" : $s;
      }
      
      function http_post($url, $param, $wxchat) {
       $oCurl = curl_init();
       if (stripos($url, "https://") !== FALSE) {
       curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
       curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
       }
       if (is_string($param)) {
       $strPOST = $param;
       } else {
       $aPOST = array();
       foreach ($param as $key => $val) {
        $aPOST[] = $key . "=" . urlencode($val);
       }
       $strPOST = join("", $aPOST);
       }
       curl_setopt($oCurl, CURLOPT_URL, $url);
       curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($oCurl, CURLOPT_POST, true);
       curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);
       if($wxchat){
       curl_setopt($oCurl,CURLOPT_SSLCERT,$wxchat['api_cert']);
       curl_setopt($oCurl,CURLOPT_SSLKEY,$wxchat['api_key']);
       curl_setopt($oCurl,CURLOPT_CAINFO,$wxchat['api_ca']);
       }
       $sContent = curl_exec($oCurl);
       $aStatus = curl_getinfo($oCurl);
        curl_close($oCurl);
        
       if (intval($aStatus["http_code"]) == 200) {
       return $sContent;
       } else {
       return false;
       }
     }

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

    您可能感兴趣的文章:
    • PHP APP微信提现接口代码
    • PHP实现微信提现功能
    上一篇:php curl发送请求实例方法
    下一篇:php菜单/评论数据递归分级算法的实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP实现微信提现(企业付款到零钱) PHP,实现,微信,提现,企业,