PaynotifyController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020-09-11
  6. * Time: 16:28
  7. */
  8. namespace api\js\controller;
  9. use Aliyun\DySDKLite\SignatureHelper;
  10. use api\js\model\GoodsOrderModel;
  11. use api\js\model\JsCourseOrderModel;
  12. use api\js\model\JsModel;
  13. use api\js\model\JsOrderAddtimeModel;
  14. use api\js\model\JsOrderModel;
  15. use api\js\model\JsProjectModel;
  16. use api\js\model\UserModel;
  17. use cmf\controller\RestBaseController;
  18. use think\Db;
  19. class PaynotifyController extends RestBaseController
  20. {
  21. /**
  22. * 微信支付回调
  23. */
  24. public function wx()
  25. {
  26. $xmlstr= file_get_contents("php://input");
  27. $array = xml_toarray($xmlstr);
  28. $wxpay = cmf_get_option('wxpay');
  29. if($array['result_code'] == 'SUCCESS' && $array['return_code'] == 'SUCCESS'){
  30. $type = $this->request->param('type');
  31. $order_sn = $array['out_trade_no'];
  32. $model = '';
  33. switch ($type){
  34. case 1:
  35. $info['key'] = $wxpay['js_key'];
  36. $model = new JsCourseOrderModel();
  37. break;
  38. case 2:
  39. $info['key'] = $wxpay['js_key'];
  40. $model = new GoodsOrderModel();
  41. break;
  42. case 3:
  43. $info['key'] = $wxpay['key'];
  44. $model = new JsOrderModel();
  45. $order_info = $model::where('order_sn',$order_sn)->find();
  46. if($order_info['user_discount_id']){
  47. $userDiscountInfo = Db::name('user_discount')->where('id',$order_info['user_discount_id'])->find();
  48. if($userDiscountInfo['project_id'] != 0){
  49. if($userDiscountInfo['project_id'] == $order_info['project_id']){
  50. if($userDiscountInfo['past_time'] >= time()){
  51. Db::name('user_discount')->where('id',$order_info['user_discount_id'])->update(['hours_time'=>time(),'status'=>1]);
  52. }
  53. }
  54. }else{
  55. if($userDiscountInfo['past_time'] >= time()){
  56. Db::name('user_discount')->where('id',$order_info['user_discount_id'])->update(['hours_time'=>time(),'status'=>1]);
  57. }
  58. }
  59. }
  60. break;
  61. }
  62. $sign = $array['sign'];
  63. unset($array['sign']);
  64. ksort($array);
  65. $str='';
  66. foreach($array as $k=>$v) {
  67. $str.=$k.'='.$v.'&';
  68. }
  69. $str.='key='.$info['key'];
  70. $new_sign=strtoupper(md5($str));//加密
  71. if($sign == $new_sign){
  72. $info = $model::where('order_sn',$order_sn)->find();
  73. if($info['status'] == 0){
  74. $data['status'] = 1;
  75. $data['pay_time'] = time();
  76. $data['pay_type'] = '微信支付';
  77. $model->allowField(true)->isUpdate(true)->save($data,['id'=>$info['id']]);
  78. if($type == 100){
  79. $JsOrderModel = new JsOrderModel();
  80. $order_info = $JsOrderModel::get($info['order_id']);
  81. $order_data['price'] = $order_info['price'] + $info['price'];
  82. $order_data['pay_price'] = $order_info['price'] + $info['price'];
  83. $order_data['minute'] = $order_info['minute'] + $info['minute'];
  84. $order_data['order_price'] = $order_info['order_price'] + $info['order_price'];
  85. $JsOrderModel->allowField(true)->isUpdate(true)->save($order_data,['id'=>$info['order_id']]);
  86. Db::name('js_project')->where('id', $info['project_id'])->setInc('sales_num', 1);
  87. }
  88. if($type == 2){
  89. $log1['admin_id'] = $info['user_id'];
  90. $log1['action_time'] = date('Y-m-d H:i:s');
  91. $log1['obj_id'] = $info['id'];
  92. $log1['remark'] = '订单支付';
  93. Db::name('goods_order_action_log')->insert($log1);
  94. }
  95. if($type == 3){
  96. if($info['jiedan_js_id']){
  97. $helper = new SignatureHelper();
  98. $alisms = cmf_get_option('alisms');
  99. $security = false;
  100. $accessKeyId = $alisms['access_key_id'];
  101. $accessKeySecret = $alisms['access_key_secret'];
  102. $js_mobile = UserModel::get(JsModel::get($info['jiedan_js_id'])['user_id'])['mobile'];
  103. $params["PhoneNumbers"] = $js_mobile;
  104. $params["SignName"] = '嘀咚点到';
  105. $user_nickname = UserModel::get($info['user_id'])['user_nickname'];
  106. if($info['type'] == 1){
  107. $params["TemplateCode"] = 'SMS_204986367';
  108. $params['TemplateParam'] = Array (
  109. "product" => JsProjectModel::get($info['project_id'])['name'],
  110. );
  111. }else{
  112. $params["TemplateCode"] = 'SMS_204986363';
  113. $params['TemplateParam'] = Array (
  114. "time" => date('H:i',$info['appoint_time']),
  115. );
  116. }
  117. if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
  118. $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
  119. }
  120. $content = $helper->request(
  121. $accessKeyId,
  122. $accessKeySecret,
  123. "dysmsapi.aliyuncs.com",
  124. array_merge($params, array(
  125. "RegionId" => "cn-hangzhou",
  126. "Action" => "SendSms",
  127. "Version" => "2017-05-25",
  128. )),
  129. $security
  130. );
  131. }
  132. Db::name('js_project')->where('id',$info['project_id'])->setInc('sales_num',1);
  133. }
  134. return 'SUCCESS';
  135. }else{
  136. return 'SUCCESS';
  137. }
  138. }
  139. }
  140. }
  141. /**
  142. * 阿里云支付回调
  143. */
  144. public function aliy()
  145. {
  146. $type = $this->request->param('type');
  147. $alipay = cmf_get_option('alipay');
  148. @file_put_contents('1232211.txt',json_encode($_POST),FILE_APPEND);
  149. $aop = new \AopCertClient();
  150. $alipayCertPath = cmf_get_file_download_url($alipay['Pay_alipay_Public_key_certificate']);
  151. switch ($type){
  152. case 1:
  153. $alipayCertPath = cmf_get_file_download_url($alipay['js_Pay_alipay_Public_key_certificate']);
  154. break;
  155. case 2:
  156. $alipayCertPath = cmf_get_file_download_url($alipay['js_Pay_alipay_Public_key_certificate']);
  157. break;
  158. }
  159. $rsaPublicKey = $aop->getPublicKey($alipayCertPath);
  160. $aop->alipayrsaPublicKey = $rsaPublicKey;
  161. $bool = $aop->rsaCheckV1($_POST,$aop->alipayrsaPublicKey,'RSA2');
  162. if($bool && $_POST['trade_status'] == 'TRADE_SUCCESS'){
  163. $order_sn = $_POST['out_trade_no'];
  164. switch ($type){
  165. case 1: //购买课程
  166. $model = new JsCourseOrderModel();
  167. break;
  168. case 2: //开通超级商人
  169. $model = new GoodsOrderModel();
  170. break;
  171. case 3: //呼叫服务
  172. $model = new JsOrderModel();
  173. $order_info = $model::where('order_sn',$order_sn)->find();
  174. if($order_info['user_discount_id']){
  175. $userDiscountInfo = Db::name('user_discount')->where('id',$order_info['user_discount_id'])->find();
  176. if($userDiscountInfo['project_id'] != 0){
  177. if($userDiscountInfo['project_id'] == $order_info['project_id']){
  178. if($userDiscountInfo['past_time'] >= time()){
  179. Db::name('user_discount')->where('id',$order_info['user_discount_id'])->update(['hours_time'=>time(),'status'=>1]);
  180. }
  181. }
  182. }else{
  183. if($userDiscountInfo['past_time'] >= time()){
  184. Db::name('user_discount')->where('id',$order_info['user_discount_id'])->update(['hours_time'=>time(),'status'=>1]);
  185. }
  186. }
  187. }
  188. break;
  189. case 100:
  190. $model = new JsOrderAddtimeModel();
  191. break;
  192. }
  193. $info = $model::where('order_sn',$order_sn)->find();
  194. if($info['status'] == 0){
  195. $up['pay_type'] = '支付宝';
  196. $up['pay_time'] = time();
  197. $up['status'] = 1;
  198. $model->allowField(true)->isUpdate(true)->save($up,['id'=>$info['id']]);
  199. if($type == 100){
  200. $JsOrderModel = new JsOrderModel();
  201. $order_info = $JsOrderModel::get($info['order_id']);
  202. $order_data['price'] = $order_info['price'] + $info['price'];
  203. $order_data['pay_price'] = $order_info['price'] + $info['price'];
  204. $order_data['minute'] = $order_info['minute'] + $info['minute'];
  205. $order_data['order_price'] = $order_info['order_price'] + $info['order_price'];
  206. $JsOrderModel->allowField(true)->isUpdate(true)->save($order_data,['id'=>$info['order_id']]);
  207. Db::name('js_project')->where('id', $info['project_id'])->setInc('sales_num', 1);
  208. }
  209. if($type == 2){
  210. // $model->allowField(true)->isUpdate(true)->save($up,['id'=>$info['id']]);
  211. $log1['admin_id'] = $info['user_id'];
  212. $log1['action_time'] = date('Y-m-d H:i:s');
  213. $log1['obj_id'] = $info['id'];
  214. $log1['remark'] = '订单支付';
  215. Db::name('goods_order_action_log')->insert($log1);
  216. }
  217. if($type == 3){
  218. if($info['jiedan_js_id']){
  219. $helper = new SignatureHelper();
  220. $alisms = cmf_get_option('alisms');
  221. $security = false;
  222. $accessKeyId = $alisms['access_key_id'];
  223. $accessKeySecret = $alisms['access_key_secret'];
  224. $js_mobile = UserModel::get(JsModel::get($info['jiedan_js_id'])['user_id'])['mobile'];
  225. $params["PhoneNumbers"] = $js_mobile;
  226. $params["SignName"] = '嘀咚点到';
  227. $user_nickname = UserModel::get($info['user_id'])['user_nickname'];
  228. if($info['type'] == 1){
  229. $params["TemplateCode"] = 'SMS_204986367';
  230. $params['TemplateParam'] = Array (
  231. "product" => JsProjectModel::get($info['project_id'])['name'],
  232. );
  233. }else{
  234. $params["TemplateCode"] = 'SMS_204971115';
  235. $params['TemplateParam'] = Array (
  236. "consignee" => $user_nickname,
  237. "number" => $info['mobile'],
  238. "time" => date('H:i',$info['appoint_time']),
  239. );
  240. }
  241. if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
  242. $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
  243. }
  244. $content = $helper->request(
  245. $accessKeyId,
  246. $accessKeySecret,
  247. "dysmsapi.aliyuncs.com",
  248. array_merge($params, array(
  249. "RegionId" => "cn-hangzhou",
  250. "Action" => "SendSms",
  251. "Version" => "2017-05-25",
  252. )),
  253. $security
  254. );
  255. file_put_contents('12322.txt',$content->Message );
  256. if($content->Message == 'OK' && $content->Code == 'OK'){
  257. file_put_contents('12322.txt',$content->Message );
  258. }
  259. }
  260. Db::name('js_project')->where('id',$info['project_id'])->setInc('sales_num',1);
  261. }
  262. echo 'SUCCESS';
  263. }
  264. }
  265. }
  266. }