WchatShare.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\share;
  11. use app\model\goods\Goods as GoodsModel;
  12. use app\model\system\Site as SiteModel;
  13. use app\model\system\Config as ConfigModel;
  14. /**
  15. * 分享
  16. */
  17. class WchatShare extends WchatShareBase
  18. {
  19. protected $config = [
  20. [
  21. 'title' => '商城首页',
  22. 'config_key' => 'WCHAT_SHARE_CONFIG_INDEX',
  23. 'path' => ['/','/pages/index/index'],
  24. 'method_prefix' => 'index',
  25. ],
  26. [
  27. 'title' => '商品详情页',
  28. 'config_key' => 'WCHAT_SHARE_CONFIG_GOODS_DETAIL',
  29. 'path' => ['/pages/goods/detail'],
  30. 'method_prefix' => 'goodsDetail',
  31. ],
  32. [
  33. 'title' => '商品列表页',
  34. 'config_key' => 'WCHAT_SHARE_CONFIG_GOODS_LIST',
  35. 'path' => ['/pages/goods/list'],
  36. 'method_prefix' => 'goodsList',
  37. ],
  38. [
  39. 'title' => '支付宝支付',
  40. 'config_key' => 'WCHAT_SHARE_CONFIG_ALIPAY',
  41. 'path' => ['/pages_tool/pay/wx_pay'],
  42. 'method_prefix' => 'alipay',
  43. ],
  44. ];
  45. protected $sort = 1;
  46. /**
  47. * 首页分享数据
  48. * @param $param
  49. * @return array
  50. */
  51. protected function indexShareData($param)
  52. {
  53. $site_id = $param['site_id'] ?? 0;
  54. //站点设置
  55. $site_model = new SiteModel();
  56. $site_info = $site_model->getSiteInfo([['site_id', '=', $site_id]])['data'];
  57. //跳转路径
  58. $link = $this->getShareLink($param);
  59. //获取和替换配置数据
  60. $config_method = preg_replace('/Data$/', 'Config',__FUNCTION__);
  61. $config_data = $this->$config_method($param);
  62. $title = str_replace('{site_name}', $site_info['site_name'], $config_data['value']['title']);
  63. $desc = str_replace('{site_name}', $site_info['site_name'], $config_data['value']['desc']);
  64. $image_url = $config_data['value']['imgUrl'] ? $config_data['value']['imgUrl'] : $site_info['logo_square'];
  65. //如果都没有设置 则取默认分享图标
  66. if(empty($image_url)){
  67. $image_url = $this->getDefaultShareIcon();
  68. }
  69. $data = [
  70. 'title' => $title,
  71. 'desc' => $desc,
  72. 'link' => $link,
  73. 'imgUrl' => $image_url,
  74. ];
  75. return [
  76. 'permission' => [
  77. 'hideOptionMenu' => false,
  78. 'hideMenuItems' => [],
  79. ],
  80. 'data' => $data,//分享内容
  81. ];
  82. }
  83. /**
  84. * 首页分享配置
  85. * @param $param
  86. * @return array
  87. */
  88. protected function indexShareConfig($param)
  89. {
  90. $site_id = $param['site_id'];
  91. $config = $param['config'];
  92. $config_model = new ConfigModel();
  93. $data = $config_model->getConfig([
  94. ['site_id', '=', $site_id],
  95. ['app_module', '=', 'shop'],
  96. ['config_key', '=', $config['config_key']],
  97. ])['data'];
  98. if (empty($data['value'])) {
  99. $data['value'] = [
  100. 'title' => '{site_name}',
  101. 'desc' => '用心精选,常来逛逛',
  102. 'imgUrl' => '',
  103. ];
  104. }
  105. $variable = [
  106. ['title' => '店铺名称', 'name' => '{site_name}'],
  107. ];
  108. return [
  109. 'value' => $data['value'],
  110. 'variable' => $variable,
  111. ];
  112. }
  113. /**
  114. * 商品详情分享数据
  115. * @param $param
  116. */
  117. protected function goodsDetailShareData($param)
  118. {
  119. $site_id = $param['site_id'] ?? 0;
  120. $url = $param['url'];
  121. $parse_res = parse_url($url);
  122. parse_str($parse_res['query'] ?? '', $query);
  123. if(isset($query['goods_id'])){
  124. $goods_id = $query['goods_id'];
  125. $goods = new GoodsModel();
  126. $goods_info = $goods->getGoodsInfo([ ['site_id', '=', $site_id], ['goods_id', '=', $goods_id] ], 'price,goods_name,goods_image')['data'];
  127. if(!empty($goods_info)){
  128. $config_method = preg_replace('/Data$/', 'Config',__FUNCTION__);
  129. $config_data = $this->$config_method($param);
  130. $title = str_replace('{goods_name}', $goods_info['goods_name'], $config_data['value']['title']);
  131. $desc = str_replace('{price}', $goods_info['price'], $config_data['value']['desc']);
  132. $desc = str_replace('\n', '\r\n', $desc);
  133. $link = $this->getShareLink($param);
  134. $data = [
  135. 'title' => $title,
  136. 'desc' => $desc,
  137. 'link' => $link,
  138. 'imgUrl' => explode(',', $goods_info['goods_image'])[0] ?? '',
  139. ];
  140. return [
  141. 'permission' => [
  142. 'hideOptionMenu' => false,
  143. 'hideMenuItems' => [],
  144. ],
  145. 'data' => $data,//分享内容
  146. ];
  147. }
  148. }
  149. }
  150. /**
  151. * 商品详情分享配置
  152. * @param $param
  153. * @return array
  154. */
  155. public function goodsDetailShareConfig($param)
  156. {
  157. $site_id = $param['site_id'];
  158. $config = $param['config'];
  159. $config['config_key'] = 'WCHAT_SHARE_CONFIG_GOODS_DETAIL';
  160. $config_model = new ConfigModel();
  161. $data = $config_model->getConfig([['site_id', '=', $site_id], ['app_module', '=', 'shop'], ['config_key', '=', $config['config_key']]])['data'];
  162. if (empty($data['value'])) {
  163. $data['value'] = [
  164. 'title' => "{goods_name}",
  165. 'desc' => "优惠价:¥{price}\n全场正品\n收藏热度:★★★★★",
  166. ];
  167. }
  168. $variable = [
  169. ['title' => '商品名称', 'name' => '{goods_name}'],
  170. ['title' => '价格', 'name' => '{price}'],
  171. ];
  172. return [
  173. 'value' => $data['value'],
  174. 'variable' => $variable,
  175. ];
  176. }
  177. /**
  178. * 商品列表分享数据
  179. * @param $param
  180. * @return array
  181. */
  182. protected function goodsListShareData($param)
  183. {
  184. $site_id = $param['site_id'] ?? 0;
  185. //站点设置
  186. $site_model = new SiteModel();
  187. $site_info = $site_model->getSiteInfo([['site_id', '=', $site_id]])['data'];
  188. //跳转路径
  189. $link = $this->getShareLink($param);
  190. //获取和替换配置数据
  191. $config_method = preg_replace('/Data$/', 'Config',__FUNCTION__);
  192. $config_data = $this->$config_method($param);
  193. $title = $config_data['value']['title'];
  194. $desc = $config_data['value']['desc'];
  195. $image_url = $config_data['value']['imgUrl'] ? $config_data['value']['imgUrl'] : $site_info['logo_square'];
  196. $data = [
  197. 'title' => $title,
  198. 'desc' => $desc,
  199. 'link' => $link,
  200. 'imgUrl' => $image_url,
  201. ];
  202. return [
  203. 'permission' => [
  204. 'hideOptionMenu' => false,
  205. 'hideMenuItems' => [],
  206. ],
  207. 'data' => $data,//分享内容
  208. ];
  209. }
  210. /**
  211. * 商品列表分享配置
  212. * @param $param
  213. * @return array
  214. */
  215. protected function goodsListShareConfig($param)
  216. {
  217. $site_id = $param['site_id'];
  218. $config = $param['config'];
  219. $config_model = new ConfigModel();
  220. $data = $config_model->getConfig([
  221. ['site_id', '=', $site_id],
  222. ['app_module', '=', 'shop'],
  223. ['config_key', '=', $config['config_key']],
  224. ])['data'];
  225. if (empty($data['value'])) {
  226. $data['value'] = [
  227. 'title' => '来看看有哪些好物吧',
  228. 'desc' => "用心精选\n常来逛逛",
  229. 'imgUrl' => '',
  230. ];
  231. }
  232. $variable = [
  233. ];
  234. return [
  235. 'value' => $data['value'],
  236. 'variable' => $variable,
  237. ];
  238. }
  239. /**
  240. * 支付宝支付分享数据
  241. * @param $param
  242. * @return array
  243. */
  244. protected function alipayShareData($param)
  245. {
  246. $data = [
  247. 'title' => '',
  248. 'desc' => '',
  249. 'link' => $param['url'],
  250. 'imgUrl' => '',
  251. ];
  252. return [
  253. 'permission' => [
  254. 'hideOptionMenu' => false,
  255. 'hideMenuItems' => [],
  256. ],
  257. 'data' => $data,//分享内容
  258. ];
  259. }
  260. }