/** * 发送模板消息 * * $data = [ * 'first' => [ * 'value' => '', * 'color' => '', * ], * 'keynote1' => [ * 'value' => '', * 'color': => '', * ], * 'remark' => [ * 'value' => '', * 'color' => '' * ] * ] * * @param $data 模板数据 * @return mixed 返回发送结果 */ public function send($data) { $params = ['touser' => $this->to, 'template_id' => $this->template_id, 'url' => $this->url, 'data' => $data]; if ($this->account->temp_token_valid < time()) { $result = \handler\mp\Tool::generate_token($this->account->app_id, $this->account->app_secret); $this->account->temp_token = $result['token']; $this->account->temp_token_valid = $result['valid']; $this->account->save(); } $url = "{$this->domain}/cgi-bin/message/template/send?access_token={$this->account->temp_token}"; $result = \handler\common\UrlTool::request($url, 'POST', json_encode($params), true); return json_decode($result); }
/** * 生成JsSdk配置 * * @param $appid 公众号应用ID * @param $ticket 公众号JSApi ticket * @param $url 当前完整URL * @return array 返回完整配置 */ public static function getJssdkConfig($id = 0) { $account = \Session::get('WXAccount', false); if ($id) { $account = \Model_WXAccount::find($id); } //判断ticket是否过期 if (!$account->wechat_ticket_valid || $account->wechat_ticket_valid < time()) { if ($account->temp_token_valid < time()) { $result = \handler\mp\Tool::generate_token($account->app_id, $account->app_secret); $account->temp_token = $result['token']; $account->temp_token_valid = $result['valid']; } $result = \handler\mp\Tool::generate_jssdk_ticket($account->temp_token); $account->wechat_ticket = $result['ticket']; $account->wechat_ticket_valid = $result['valid']; $account->save(); } $url = "http://" . \Input::server('HTTP_HOST') . \Input::server('REQUEST_URI'); //参与签名的参数 $timestamp = time(); $params = array('noncestr' => \Str::random('alnum', 16), 'jsapi_ticket' => $account->wechat_ticket, 'timestamp' => $timestamp, 'url' => $url); //排序 ksort($params); //生成签名 $signature = sha1(\handler\common\UrlTool::createLinkstring($params)); //配置文件 $config = ['debug' => false, 'appId' => $account->app_id, 'timestamp' => $timestamp, 'nonceStr' => $params['noncestr'], 'signature' => $signature, 'jsApiList' => ['onMenuShareTimeline', 'onMenuShareAppMessage', 'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'onVoicePlayEnd', 'uploadVoice', 'downloadVoice', 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'translateVoice', 'getNetworkType', 'openLocation', 'getLocation', 'hideOptionMenu', 'showOptionMenu', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem', 'closeWindow', 'scanQRCode', 'chooseWXPay', 'openProductSpecificView', 'addCard', 'chooseCard', 'openCard']]; return $config; }
/** * 发货操作 * @param int $id 订单ID */ public static function delivery($id = 0) { $msg = false; $order = \Model_Order::find($id); if (!$order) { $msg = ['status' => 'err', 'msg' => '未找到订单,发货失败', 'title' => '错误']; } else { if (in_array($order->order_status, ['NONE', 'WAIT_PAYMENT'])) { $msg = ['status' => 'err', 'msg' => '订单未付款,发货失败', 'title' => '错误']; } else { if ($order->order_status != 'PAYMENT_SUCCESS') { $msg = ['status' => 'err', 'msg' => '订单状态异常,发货失败', 'title' => '错误']; } } } if ($msg) { \Session::set_flash('msg', $msg); return false; } //微信发货 $account = \Session::get('WXAccount', false); if (!$account) { $account = \Model_WXAccount::find(1); } if ($account->temp_token_valid < time()) { $result = \handler\mp\Tool::generate_token($account->app_id, $account->app_secret); $account->temp_token = $result['token']; $account->temp_token_valid = $result['valid']; $account->save(); } $delivery_count = 0; foreach ($order->details as $detail) { $sn = \Model_GoodsAccount::query()->where(['goods_id' => $detail->goods_id, 'status' => 'NONE'])->get_one(); if (!$sn) { $delivery_count++; continue; } if ($order->buyer_openid) { $remark = "订单号:{$order->order_no}\n用户名:{$sn->account}\n密码:{$sn->password}"; $data = \handler\mp\TemplateMsg::get_buy_goods_success($detail->goods->name, $remark); $params = \handler\mp\TemplateMsg::get_base_params($order->buyer_openid, "ARlIzufqpUc8tvCTAVswkny-_AYwYatkxiw42MOa_uA", "http://mall.doujao.com", $data); $flag = \handler\mp\TemplateMsg::send_msg($account->temp_token, $params); if ($flag) { $sn->status = 'USED'; $sn->order_id = $order->id; $sn->save(); } $detail->is_delivery = 1; $detail->save(); } } if ($delivery_count > 0) { \Session::set_flash('msg', ['status' => 'err', 'msg' => "{$delivery_count}件商品发货失败.原因:库存不足!请联系客服.", 'title' => '错误']); return false; } $order->order_status = 'FINISH'; $order->save(); return true; }