源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

完美利用Yii2微信后台开发的系列总结

  • 时间:2022-09-21 06:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:完美利用Yii2微信后台开发的系列总结
网上有很多关于YII2.0微信开发教程,但是太过复杂凌乱,所以今天在这里给大家整理总结利用Yii2微信后台开发的系列了,给需要的小伙伴们参考。 [b]一:接入微信[/b] [b]Yii2后台配置[/b] 1.在app/config/params.php中配置token参数
return [
 //微信接入
 'wechat' =>[
 'token' => 'your token',
 ],
];
2.在app/config/main.php中配置路由 因为接口模块使用的RESTful API,所以需要定义路由规则。
'urlManager' => [
 'enablePrettyUrl' => true,
 'enableStrictParsing' => true,
 'showScriptName' => false,
 'rules' => [
 [
  'class' => 'yii\rest\UrlRule',
  'controller' => 'wechat',
  'extraPatterns' => [
  'GET valid' => 'valid',
  ],
 ],
 ],
],
3.在app/controllers中新建WechatController
<?php

namespace api\controllers;

use Yii;
use yii\rest\ActiveController;

class WechatController extends ActiveController
{

 public $modelClass = '';

 public function actionValid()
 {
 $echoStr = $_GET["echostr"];
 $signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 //valid signature , option
 if($this->checkSignature($signature,$timestamp,$nonce)){
  echo $echoStr;
 }
 }

 private function checkSignature($signature,$timestamp,$nonce)
 {
 // you must define TOKEN by yourself
 $token = Yii::$app->params['wechat']['token'];
 if (!$token) {
  echo 'TOKEN is not defined!';
 } else {
  $tmpArr = array($token, $timestamp, $nonce);
  // use SORT_STRING rule
  sort($tmpArr, SORT_STRING);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );

  if( $tmpStr == $signature ){
  return true;
  }else{
  return false;
  }
 }
 }

}
微信公众号后台配置 在微信公众号后台配置URL和Token,然后提交验证即可。
URL:http://app.demo.com/wechats/valid
Token:your token
[b]二:获取用户信息[/b] 用户表设计
[url=https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$accessToken]https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$accessToken[/url];             $res = json_decode(self::curlGet($url));             $ticket = $res->ticket;             if ($ticket) {                 $redis->set('wechat:jsapi_ticket', $ticket);                 $redis->expire('wechat:jsapi_ticket', 7000);             }         }         return $ticket;     }     public static function getAccessToken() {         //使用Redis缓存 access_token         $redis = Yii::$app->redis;         $redis_token = $redis->get('wechat:access_token');         if ($redis_token) {             $access_token = $redis_token;         } else {             $appid = Yii::$app->params['wechat']['appid'];             $appsecret = Yii::$app->params['wechat']['appsecret'];             $url = "[url=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret]https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret[/url];             $res = json_decode(self::curlGet($url));             $access_token = $res->access_token;             if ($access_token) {                 $redis->set('wechat:access_token', $access_token);                 $redis->expire('wechat:access_token', 7000);             }         }         return $access_token;     }     public static function curlGet($url = '', $options = array()){         $ch = curl_init($url);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($ch, CURLOPT_TIMEOUT, 30);         if (!empty($options)) {             curl_setopt_array($ch, $options);         }         //https请求 不验证证书和host         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);         $data = curl_exec($ch);         curl_close($ch);         return $data;     }     public static function curlPost($url = '', $postData = '', $options = array()){         if (is_array($postData)) {             $postData = http_build_query($postData);         }         $ch = curl_init();         curl_setopt($ch, CURLOPT_URL, $url);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($ch, CURLOPT_POST, 1);         curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);         curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数         if (!empty($options)) {             curl_setopt_array($ch, $options);         }         //https请求 不验证证书和host         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);         $data = curl_exec($ch);         curl_close($ch);         return $data;     }     public static function createNonceStr($length = 16){         $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';         $str = '';         for ($i = 0; $i<$length; $i++){             $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);         }         return $str;     } }
2.获取config参数接口
public function actionConfig(){
 if (isset($_REQUEST['url'])) {
 $url = $_REQUEST['url'];
 //微信支付参数
 $appid = Yii::$app->params['wechat']['appid'];
 $mchid = Yii::$app->params['wechat']['mchid'];
 $key = Yii::$app->params['wechat']['key'];
 $wx_pay = new WechatPay($mchid, $appid, $key);
 $package = $wx_pay->getSignPackage($url);
 $result['error'] = 0;
 $result['msg'] = '获取成功';
 $result['config'] = $package;
 } else {
 $result['error'] = 1;
 $result['msg'] = '参数错误';
 }
 return $result;
}
以上就是利用Yii2微信后台开发全部过程及示例代码,希望本文对大家基于php的微信公众平台开发有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部