微信提现

     //企业向个人付款
    public function payToUser() {
        $openid = ;  //获取用户openid
        //微信付款到个人的接口
        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
        $params["mch_appid"] = '    ';   //公众账号appid
        $params["mchid"] = '    ';   //商户号 微信支付平台账号
        $params["nonce_str"] = $this->nonce_str();   //随机字符串
        $params["partner_trade_no"] = time().rand(1111111,9999999);           //商户订单号
        $params["amount"] = intval($info['price']*100);          //金额  
        $params["desc"] = '余额提现';            //企业付款描述
        $params["openid"] = $openid;          //用户openid
        $params["check_name"] = 'NO_CHECK';       //不检验用户姓名
        $params['spbill_create_ip'] = '';   //获取IP   服务器IP
        //生成签名(签名算法后面详细介绍)
        $str = 'amount=' . $params["amount"] . '&check_name=' . $params["check_name"] . '&desc=' . $params["desc"] . '&mch_appid=' . $params["mch_appid"] . '&mchid=' . $params["mchid"] . '&nonce_str=' . $params["nonce_str"] . '&openid=' . $params["openid"] . '&partner_trade_no=' . $params["partner_trade_no"] . '&spbill_create_ip=' . $params['spbill_create_ip'] . '&key= 商户平台获取';
        //md5加密 转换成大写
        $sign = strtoupper(md5($str));
        $params["sign"] = $sign; //签名
        $xml = $this->arrayToXml($params);
        $success = $this->curl_post_ssl($url, $xml);
        $post_data = $this->xml($success);
        if($post_data['return_code'] == 'SUCCESS' && $post_data['result_code'] == 'SUCCESS'){
            //提现成功  写自己的逻辑
        }
        return json_encode($post_data);
    }

    /**
    *  array转xml
    */
    public function arrayToXml($arr) {
        $xml = "<xml>";
        foreach ($arr as $key => $val) {
            if (is_numeric($val)) {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            } else
                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
        }
        $xml .= "</xml>";
        return $xml;
    }

    //使用证书,以post方式提交xml到对应的接口url
    /**
     *   作用:使用证书,以post方式提交xml到对应的接口url
     */
    function curl_post_ssl($url, $vars, $second = 30) {
        $ch = curl_init();
        //超时时间
        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_SSLCERT, "apiclient_cert.pem");
        curl_setopt($ch, CURLOPT_SSLKEY, "apiclient_key.pem");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);

        $data = curl_exec($ch);
        if ($data) {
            curl_close($ch);
            // dump($data);
            return $data;
        } else {
            $error = curl_errno($ch);
            // echo "call faild, errorCode:$error\n";
            curl_close($ch);
            return false;
        }
    }

    //随机32位字符串
    private function nonce_str()
    {
        $result = '';
        $str = 'QWERTYUIOPASDFGHJKLZXVBNMqwertyuioplkjhgfdsamnbvcxz';
        for($i=0;$i<32;$i++){
         $result .= $str[rand(0,48)]; 
        }
        return $result;
    }

    //签名 $data要先排好顺序
    private function sign($data)
    {
        $stringA = '';
        foreach($data as $key=>$value){
             if(!$value) continue;
              if($stringA) $stringA.='&'.$key."=".$value;
              else $stringA = $key."=".$value;
        }
        $wx_key = 'tiaoxin2018kuaiyou2018keji091100';
        $stringSignTemp = $stringA.'&key='.$wx_key;
        return strtoupper(md5($stringSignTemp));
    }

    //获取xml
    private function xml($xml){
        if(!$xml){
            return false;
        }
        //将XML转为array
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $data;
    }

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值