您现在的位置是:首页 > 技术教程 正文

PHP微信公众号(微信小程序)模板消息推送

admin 阅读: 2024-03-15
后台-插件-广告管理-内容页头部广告(手机)
  1. /**
  2. * 补货订单通知
  3. */
  4. public function orderStockout($store_id)
  5. {
  6. $user = new \app\admin\model\User();
  7. $user_info = $user->where('store_id',$store_id)->find();
  8. if(!$user_info){
  9. return ['code'=>0,'message'=>'商家不存在'];
  10. }
  11. if(!$user_info['openid']){
  12. return ['code'=>0,'message'=>'openid未获取到,请先绑定微信账号'];
  13. }
  14. //获取商品
  15. $where = [
  16. 's.uid' => $store_id,
  17. 's.is_integral' => 0,
  18. 's.is_stock' => 0,
  19. ];
  20. $field = 's.id,g.name,s.inventory,s.stock_num';
  21. $sproduct = new Product();
  22. $result = $sproduct->alias('s')
  23. ->join('goods_product g','g.id=s.product_id','left')
  24. ->where($where)
  25. ->field($field)
  26. ->select();
  27. if(!$result){
  28. return ['code'=>0,'message'=>'暂无商品需要补货'];
  29. }
  30. $str = '';
  31. $ids = [];
  32. $number = 0;
  33. foreach($result as $ka=>$va){
  34. if($va['inventory'] <= $va['stock_num']){
  35. $str .= $va['name'].',';
  36. $ids[] = $va['id'];
  37. if($number == 0){
  38. $number = $va['inventory'];
  39. }
  40. }
  41. }
  42. //如果到达预警的商品数量没有
  43. if(count($ids) <= 0){
  44. return true;
  45. }
  46. //更新达到预警的商品状态
  47. $sproduct::where(['id'=>['in',$ids]])->update(['is_stock'=>1]);
  48. $data = array(
  49. 'first' => array(
  50. 'value'=> '您好,您有商品库存不足',
  51. 'color'=>''
  52. ),
  53. 'keyword1'=>array(
  54. 'value'=>implode(',',$ids),
  55. 'color'=>''
  56. ),
  57. 'keyword2'=>array(
  58. 'value'=> $str,
  59. 'color'=>''
  60. ),
  61. 'keyword3'=>array(
  62. 'value'=> $number,
  63. 'color'=>''
  64. ),
  65. 'remark' => array(
  66. 'value'=>'感谢您的使用',
  67. 'color'=>''
  68. ),
  69. );
  70. $url = '跳转页面';
  71. $template_id = '微信模板消息id';
  72. return $this->sendWechatMessage($user_info['openid'],$template_id,$data,$url);
  73. }
  74. /**
  75. * 发送微信模板消息
  76. * @param $order_id
  77. * @param $template
  78. * @return false|string|\think\response\Json
  79. */
  80. public function sendWechatMessage($openid,$template_id,$data,$url)
  81. {
  82. $data = array(
  83. "touser" => $openid, //openid
  84. "template_id" => $template_id, //模板id
  85. "url" => $url,
  86. "data" => $data //模板数据
  87. );
  88. //下单用户发送
  89. $access_token = $this->access_token();
  90. if ($access_token == 400){
  91. return ['code'=>0,'message'=>'获取access_token失败'];
  92. }
  93. $urls = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token;
  94. $result = $this->http_post_json($urls,json_encode($data));//发送请求
  95. if($result[0] == 200){
  96. return ['code'=>1,'data'=>'推送成功'];
  97. }
  98. return ['code'=>0,'message'=>$result[1]['errmsg']];
  99. }
  100. public function http_post_json($url, $jsonStr)
  101. {
  102. $ch = curl_init();
  103. curl_setopt($ch, CURLOPT_POST, 1);
  104. curl_setopt($ch, CURLOPT_URL, $url);
  105. curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  106. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  107. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  108. 'Content-Type: application/json; charset=utf-8',
  109. 'Content-Length: ' . strlen($jsonStr)
  110. )
  111. );
  112. $response = curl_exec($ch);
  113. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  114. curl_close($ch);
  115. return [$httpCode,$response];
  116. // return json_encode(array($httpCode, $response),true);
  117. //"[200,"{\"errcode\":0,\"errmsg\":\"ok\",\"msgid\":2696398438942572550}"]"
  118. }
  119. //获取access_token
  120. public function access_token(){
  121. $appId = Config::get('wechat_config.appid');
  122. $appSecret = Config::get('wechat_config.secret');
  123. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
  124. $ch = curl_init();//初始化curl
  125. curl_setopt($ch, CURLOPT_URL,$url); //要访问的地址
  126. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  127. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过证书验证
  128. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
  129. $data = json_decode(curl_exec($ch),true);
  130. if(curl_errno($ch)){
  131. var_dump(curl_error($ch)); //若错误打印错误信息
  132. }
  133. curl_close($ch);//关闭curl
  134. return $data['access_token'];
  135. }

逻辑部分可以根据具体的需求自己更改,变量格式是会根据选择用户模板而变,模板有几个变量,就写几个keyword ,小程序的话和这个大差不差,基本上就是调整一下参数就可以继续使用了

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜