微信用户授权及企业付款

来源:互联网 发布:linux dhcp服务 编辑:程序博客网 时间:2024/04/29 09:50

微信用户授权及企业付款

  • 用户授权

        /*     *获取微信授权登录的二维码     */    public function my_withdraw(){        $system = M("system")->where(["id"=>1])->find();        $redirect_uri ='http%3a%2f%2fbaidui.tstmobile.com%2findex.php%3fm%3dOpera%26c%3dCaiwu%26a%3ddomy_withdraw';        $url = "https://open.weixin.qq.com/connect/qrconnect?appid=".$this->appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";        header("Location: ".$url);    }    //微信回调地址(获取用户的相关信息)    public function domy_withdraw(){        //获取code        $code = ($_GET["code"]);        //通过code获取access_token        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid ."&secret=" . $this->appsecret. "&code=" .$code  . "&grant_type=authorization_code";        $result = $this->curl_get($url);        $arr = json_decode($result, true);        $url1 = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" . $this->appid . "&grant_type=refresh_token&refresh_token=" . $arr['refresh_token'];        $arr1 = $this->curl_get($url1);        $arr1 = json_decode($arr1, true);        $url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $arr1['access_token'] ."&openid=" . $this->appid ."&lang=zh_CN";        $arr2 = $this->curl_get($url2);        $arr2 = json_decode($arr2, true);        $openid = $arr['openid'];        //获取代理商center_id        $fid = $_SESSION["opera"]["center_id"];        if(!empty($openid)){            $data['uptime'] = time();            $res = M("center")->where(["openid"=>$openid,"center_id" => $fid])->find();            if($res){                $update_res = M("center")->where(["center_id"=>$fid])->save($data);            }else{                $data["wx_img"] = $arr2["headimgurl"];                $data['openid'] = $openid;                $data['wx_nickname'] = $arr2['nickname'];                $update_res = M("center")->where(["center_id"=>$fid])->save($data);            }            if($update_res){                $this->success('提现账号绑定成功',U('Index/index'));            }else{                $this->success('提现账号绑定失败', U('Index/index'));            }        }    }
  • 微信公众公众号授权登录

     private $appid="***";private $appsecret="***";/* *获取微信授权登登录 */public function wx_authorization(){    $redirect_uri ='http%3a%2f%2fdspx.tstmobile.com%2fapi%2flogin%2fwx_callback';    $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";    header("Location: ".$url);}//微信回调地址(获取用户的相关信息)public function wx_callback (){    //获取code    $code = ($_GET["code"]);    //通过code获取access_token    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $code . "&grant_type=authorization_code";    $result = curl_get($url);    $arr = json_decode($result, true);    $url1 = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" . $this->appid . "&grant_type=refresh_token&refresh_token=" . $arr['refresh_token'];    $arr1 = curl_get($url1);    $arr1 = json_decode($arr1, true);    $url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $arr1['access_token'] . "&openid=" . $this->appid . "&lang=zh_CN";    $arr2 = curl_get($url2);    $openid = $arr['openid'];    if (!empty($openid)) {        $check = DB::name("user")->where(["openid" => $openid])->find();        if (!$check) {            $arr2 = json_decode($arr2, true);            $data['openid'] = $openid;            $data['token'] = uniqid();            $data['intime'] = date("Y-m-d H:i:s", time());            $data['username'] = $arr2['nickname'];            $data['img'] = $arr2['headimgurl'];            $data['sex'] = $arr2['sex'];            $data['province'] = $arr2['province'];            $data['city'] = $arr2['city'];            $result = DB::name("user")->insert($data);            $this->api_return("201","登录成功");        } else {            $this->api_return("201","登录成功");        }    }else{        $this->api_return("404","授权失败");    }
  • 企业付款

    <?phpnamespace Admin\Controller;use PMA\libraries\URL;class WxapiController extends CommonController{    public function __initilize(){        parent::_initialize();    }    const URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //企业付款接口地址    /**     * TODO:设置商户证书路径     * 证书路径,注意应该填写绝对路径,发送红包和查询需要,可登录商户平台下载     * API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)     * @var path 跟这个文件同一目录下的cert文件夹放置证书!!!!     */    const SSLCERT_PATH = 'cert/apiclient_cert.pem';    const SSLKEY_PATH = 'cert/apiclient_key.pem';    //相关配置参数    private $mch_appid = "wx6cxxxa4105"; //企业appid    private $appSecret ="dbe09xxxd3742b956b8bc";//$appSecret    private $mchid = "146xxxx02"; //商户号    private $apikey = "xxxxxxx";//商户秘钥    //进行提现操作    public function actionAct_tixian(){        $withdraw_record_id = I("withdraw_record_id");        $res = M("withdraw_record")->where(["withdraw_record_id" =>$withdraw_record_id])->find();        if(!$res){            var_dump("error");            //$this->error("付款失败");        }        $nonce_str = $this->getRand(30, 3); //随机字符串        $partner_trade_no = $this->geto;//商户订单号        $check_name = "NO_CHECK";//校验用户姓名选项        $re_user_name= $res["wx_nickname"];//收款人姓名        $amount= $res["amount"]; //收款金额        $desc = "xxx"; //描述        $spbill_create_ip = $this->getServerIp();//ip        $openid = $res["openid"];//用户openid        $partner_trade_no = $this->getPartnerTradeNo();        //进行签名        $content = "amount=".$amount."&check_name=".$check_name."&desc=".$desc."&mch_appid=".$this->mch_appid."&mchid=".$this->mchid."&nonce_str=". $nonce_str."&openid=".$openid.            "&partner_trade_no=".$partner_trade_no."&re_user_name=".$re_user_name."&spbill_create_ip=".$spbill_create_ip;        $sign = $this->_sign($content,$this->apikey);        $xml= '<xml>';        $xml .= "<mchid>".$this->mchid."</mchid>";        $xml .= "<mch_appid>".$this->mch_appid."</mch_appid>";        $xml .= "<nonce_str>".$this->getPartnerTradeNo()."</nonce_str>";        $xml .= "<partner_trade_no>".$partner_trade_no."</partner_trade_no>";        $xml .= "<openid>".$openid."</openid>";        $xml .= "<check_name>".$check_name."</check_name>";        $xml .= "<re_user_name>".$re_user_name."</re_user_name>";        $xml .= "<amount>".$amount."</amount>";        $xml .= "<desc>".$desc."</desc>";        $xml .= "<spbill_create_ip>".$spbill_create_ip."</spbill_create_ip>";        $xml .= "<sign>".$sign."</sign>";        $xml .= "</xml>";        $resultObj = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);        $result = $this->curl_post_ssl(URL,$xml);        if(!$result){            return false;        }        //解析xml         $resultObj = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);        if($resultObj->return_code =="SUCCESS"){            //成功后的操作        }    }    /**     * cURL抓取     *     * @param $url 链接地址     * @param $vars 参数     * @param  $second     * @param  $aHeader     * @return mixed|boolean     */    function curl_post_ssl($url, $data, $second = 30, $aHeader = array())    {        $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);        // cert 与 key 分别属于两个.pem文件        curl_setopt($ch, CURLOPT_SSLCERT, $this->_cert['api_cert']);        curl_setopt($ch, CURLOPT_SSLKEY, $this->_cert['api_key']);        curl_setopt($ch, CURLOPT_CAINFO, $this->_cert['rootca']);        if (count($aHeader) >= 1) {            curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);        }        curl_setopt($ch, CURLOPT_POST, 1);        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);        $data = curl_exec($ch);        if ($data) {            curl_close($ch);            return $data;        } else {//            $this->log(json_encode($this->_cert));//            $this->error = 'aa:'.curl_errno($ch);            curl_close($ch);            return false;        }    }    /**     * 签名     *  @param $content 签名的字符串     * @param $key 密钥     * @throws Exception     * @return string|boolean     */    private function _sign($content,$key){        try {            if (null == $key) {                $this->error = '签名key不能为空!';                return false;            }            if (null == $content) {                $this->error = '签名内容不能为空';                return false;            }            $signStr = $content . "&key=" . $key;            return strtoupper(md5($signStr));        } catch (Exception $e) {            $this->error = $e->getMessage();            return false;        }    }    /**     * 获取服务器ip     * @return string     */    private function getServerIp()    {        $server_ip = '127.0.0.1';        if (isset($_SERVER)) {            if (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR']) {                $server_ip = $_SERVER['SERVER_ADDR'];            } elseif (isset($_SERVER['LOCAL_ADDR']) && $_SERVER['LOCAL_ADDR']) {                $server_ip = $_SERVER['LOCAL_ADDR'];            }        } else {            $server_ip = getenv('SERVER_ADDR');        }        return $server_ip;    }    /**     * 获取随机数     * @param number $len 随机数的位数     * @param number $type 取值范围 1表示数字 2小写字母 4大写字母     * @return string     */    public function getRand($len = 30, $type = 0)    {        $str = '';        $max = - 1;        if (! $type) {            $type = 3;        }        if ($type & 1) {            $str .= '1234567890';            $max += 10;        }        if ($type & 2) {            $str .= 'abcdefghijklmnopqrstuvwxyz';            $max += 26;        }        if ($type & 4) {            $str .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';            $max += 26;        }        $rand = '';        for ($i = 0; $i < $len; $i ++) {            $rand .= $str[rand(0, $max)];        }        return $rand;    }    /**     * 生成商户的订单号     * @return string     */    public function getPartnerTradeNo()    {        $partner_trade_no = $this->mchid . date('YmdHis') . $this->getRand(4, 1); // $this->getRandNum();        return $partner_trade_no;    }}

    相关文档参考文档