微信用户授权及企业付款

  • 用户授权

        /**获取微信授权登录的二维码*/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","授权失败");}
  • 企业付款

    <?php
    namespace 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"; //企业appidprivate $appSecret ="dbe09xxxd3742b956b8bc";//$appSecretprivate $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;}
    }

    相关文档参考文档

微信用户授权及企业付款相关推荐

  1. 微信支付之企业付款--微信商户后台没有“企业付款到零钱”解决方案

    项目需要用到用户提现功能,准备用微信支付提供的企业付款功能,即提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款. 登录商户后台准备开通,发现产品中心中并不存 ...

  2. 微信用户授权(微信支付前必须准备)

    官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html# ...

  3. thinkPHP+easyWeChat开发微信公众号支付,企业付款,红包

    easywechat 配置 public function __construct(){$configModel = new Setting();$this->orderModel = new ...

  4. 【微信小程序】企业付款接口

    参考网上博客:https://blog.csdn.net/shaomiaojava/article/details/50562550 import java.io.*; import java.mat ...

  5. 微信小程序之企业付款

    企业支付的前提条件: 不仅要开通微信支付功能,绑定商户号,还要下载商户证书,企业支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay. ...

  6. java实现第三方网页获取微信用户授权后的微信用户基本信息

    本文内容基本按照官方文档,若想直接看官方文档,可直接点击查看:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_w ...

  7. Java微信小程序接入企业付款到零钱

    近日完成微信企业付款 API的接入,特此记录过程作为备忘. 企业付款到零钱的功能的开通资格可以在微信商户平台上看到. 简单来说就是在商户平台 - 运营工具 中可以看到如上图所示工具模块即可开通. 开通 ...

  8. 微信小程序案例 | 微信用户授权登录,无需cookie

    首先,先看一下效果图: 这里,微信用户可以通过授权,进行登录 功能的主要实现,是通过wx.getUserProfile()这个API wx.getUserProfile()会获取用户的信息,然后我们可 ...

  9. 考研打卡app小程序第二篇(微信用户授权)

    安卓和小程序体验 小程序体验 安卓版本体验 安卓体验 一.小程序结构 目录结构 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的 ...

最新文章

  1. 2016百度实习编程题:括号序列
  2. 盘丝洞服务器维护,斗战神哪些区合区了_斗战神合区后名字重复怎么办_快吧游戏...
  3. 深入了解JavaScript对象(2)--函数、对象
  4. IC/FPGA笔试题分析(五)
  5. 什么情况下可以不写PHP的结束标签“?”
  6. java 输出 三角形_Java实现输出三角形
  7. 图像降噪算法——低秩聚类:WNNM算法
  8. Java黑皮书课后题第7章:*7.28(数学:组合)编写一个程序,提示用户输入10个整数,然后显示从这10个数中选出两个数的所有组合
  9. 生日快乐程序_祝肖战1005生日快乐-用R给他画个蛋糕爱心吧
  10. [react] 请说说react中Portal是什么?
  11. PID控制器开发笔记之十:步进式PID控制器的实现
  12. SQL数据库相关 FMDB框架的使用
  13. 计算机机房的维护管理论文,学校计算机机房维护与管理论文
  14. 苹果mac专业的图像后期处理软件:Lightroom Classic
  15. 复变函数知识总结(1)——序言和准备知识
  16. 最安全的金笛JDMail邮件系统的安全防范技术介绍--2
  17. java 使用的钩子_Java 钩子程序
  18. 大漠插件保护盾_易辅客栈第8套 大漠插件命令详解及使用方法
  19. 想做一个SSL代理的集群中,有很多问题需要解决,I am all grateful to you for your advice
  20. 神解释:为什么程序员怕改需求?

热门文章

  1. Navicat连接SqlServer 提示远程主机关闭一个现有连接
  2. if语句——python
  3. 央行数字货币技术架构---HashGraph共识算法1
  4. 一支笔的测试点_一张纸一支笔,简单一招教你自测是否有眼底黄斑病变
  5. 重生之我是赏金猎人-SRC漏洞挖掘(十三)-攻防对抗/梦中绝杀X脖代理商
  6. mysql 免安装版 启动_Windows下配置启动免安装版本mysql
  7. 类似于wps的linux软件,出了Office、WPS还有哪些好用的办公软件?
  8. Flatty Shadow图标自动产生器——在线生成各种扁平化 ICON
  9. xxx uses VFP register arguments xxx does not
  10. Ice飞冰注意问题和可视化组件《三》