Notify.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 小程序公共API服务
  7. */
  8. namespace app\popupshop\controller\api\v1;
  9. use app\popupshop\controller\api\Base;
  10. use app\common\facade\WechatPay;
  11. use app\popupshop\model\SaleOrder;
  12. use app\popupshop\model\Config;
  13. use app\popupshop\model\SaleUser;
  14. use app\popupshop\model\Sale;
  15. use app\popupshop\model\Bank;
  16. use app\popupshop\model\BankBill;
  17. use app\popupshop\model\BankRecharge;
  18. use app\popupshop\model\Order;
  19. use app\common\model\SystemMemberBankBill;
  20. use app\common\model\SystemMemberBank;
  21. use Exception;
  22. class Notify extends Base{
  23. /**
  24. * 微信小程序支付回调
  25. * @return void
  26. */
  27. public function sale(){
  28. try {
  29. $response = WechatPay::doPay($this->miniapp_id)->handlePaidNotify(function($message,$fail){
  30. $result = SaleOrder::where(['order_no' => $message['out_trade_no'],'paid_at' => 0])->find();
  31. if (empty($result)){
  32. return true;
  33. }
  34. if ($message['return_code'] === 'SUCCESS') {
  35. if($message['result_code'] === 'SUCCESS'){
  36. $ispay = WechatPay::doPay($this->miniapp_id)->order->queryByOutTradeNumber($message['out_trade_no']);
  37. if ($ispay['return_code'] === 'SUCCESS') {
  38. if ($ispay['result_code'] === 'SUCCESS') {
  39. if ($ispay['trade_state'] === 'SUCCESS') {
  40. //修改订单
  41. $result->paid_at = 1;
  42. $result->paid_time = strtotime($ispay['time_end']);
  43. $result->paid_no = $ispay['transaction_id'];
  44. $result->save();
  45. Sale::where(['id' =>$result->sale_id])->update(['is_pay' => 1]); //修改状态
  46. if(!empty($result->sale)){
  47. $rebate = saleUser::where(['id' =>$result->sale->sales_user_id,'is_rebate' => 0])->find();
  48. if(!empty($rebate)){
  49. //配置
  50. $config = Config::where(['member_miniapp_id' => $this->miniapp_id])->find();
  51. //成本价
  52. $gift = array_column(json_decode($result->sale->gift,true),'cost_price');
  53. $cost_price = array_sum($gift);
  54. //利润
  55. $service_fee = $result->real_amount*$config->profit/100; //服务费
  56. $rebate = $result->real_amount-$service_fee-$cost_price; //成交价-服务费-成本
  57. SaleUser::where(['id' =>$result->sale->sales_user_id])->update(['is_sale' => 0,'is_rebate' => 1,'rebate' => $rebate,'update_time'=> $result->paid_time]);
  58. //日志
  59. BankBill::add($result->member_miniapp_id,$result->sale->user_id,0,'已成交,待结算利润¥'.$rebate,$result->user_id,$result->order_no);
  60. }
  61. }
  62. //扣款交易服务费
  63. $goodpay_tax = $result->order_amount*0.05;
  64. SystemMemberBankBill::create(['state' => 1,'money' => $goodpay_tax,'member_id' => $this->miniapp->member_id,'message'=> '平台服务费','update_time' => $result->paid_time]);
  65. SystemMemberBank::moneyUpdate($this->miniapp->member_id,-$goodpay_tax);
  66. return true;
  67. }
  68. }
  69. }
  70. return $fail('通信失败,请稍后再通知我');
  71. }else{
  72. return $fail('通信失败,请稍后再通知我');
  73. }
  74. }else{
  75. return $fail('通信失败,请稍后再通知我');
  76. }
  77. });
  78. $response->send();
  79. }catch (Exception $e) {
  80. $this->error('页面不存在');
  81. }
  82. }
  83. /**
  84. * 帐号充值
  85. * @access public
  86. */
  87. public function recharge(){
  88. try {
  89. $response = WechatPay::doPay($this->miniapp_id)->handlePaidNotify(function($message,$fail){
  90. $result = BankRecharge::where(['order_no' => $message['out_trade_no'],'state' => 0])->find();
  91. if (empty($result)){
  92. return true;
  93. }
  94. if ($message['return_code'] === 'SUCCESS') {
  95. if($message['result_code'] === 'SUCCESS'){
  96. $ispay = WechatPay::doPay($this->miniapp_id)->order->queryByOutTradeNumber($result->order_no);
  97. if ($ispay['return_code'] === 'SUCCESS') {
  98. if ($ispay['result_code'] === 'SUCCESS') {
  99. if ($ispay['trade_state'] === 'SUCCESS') {
  100. Bank::moneyChange($this->miniapp_id,$result->user_id,$result->money);
  101. BankBill::add($result->member_miniapp_id,$result->user_id,$result->money,'充值¥'.$result->money,0,$result->order_no);
  102. $result->state = 1;
  103. $result->paid_time = strtotime($ispay['time_end']);
  104. $result->paid_no = $ispay['transaction_id'];
  105. $result->save();
  106. return true;
  107. }
  108. }
  109. }
  110. return $fail('通信失败,请稍后再通知我');
  111. }else{
  112. return $fail('通信失败,请稍后再通知我');
  113. }
  114. }else{
  115. return $fail('通信失败,请稍后再通知我');
  116. }
  117. });
  118. $response->send();
  119. }catch (Exception $e) {
  120. $this->error('页面不存在');
  121. }
  122. }
  123. /**
  124. * 商城购买
  125. * @access public
  126. */
  127. public function shop(){
  128. try {
  129. $response = WechatPay::doPay($this->miniapp_id)->handlePaidNotify(function($message,$fail){
  130. $result = Order::where(['order_no' => $message['out_trade_no'],'state' => 0])->find();
  131. if (empty($result)){
  132. return true;
  133. }
  134. if ($message['return_code'] === 'SUCCESS') {
  135. if($message['result_code'] === 'SUCCESS'){
  136. $ispay = WechatPay::doPay($this->miniapp_id)->order->queryByOutTradeNumber($result->order_no);
  137. if ($ispay['return_code'] === 'SUCCESS') {
  138. if ($ispay['result_code'] === 'SUCCESS') {
  139. if ($ispay['trade_state'] === 'SUCCESS') {
  140. $result->paid_at = 1;
  141. $result->paid_time = strtotime($ispay['time_end']);
  142. $result->paid_no = $ispay['transaction_id'];
  143. $result->save();
  144. BankBill::add($result->member_miniapp_id,$result->user_id,$result->money,'下单购买宝贝',0,$result->order_no);
  145. return true;
  146. }
  147. }
  148. }
  149. return $fail('通信失败,请稍后再通知我');
  150. }else{
  151. return $fail('通信失败,请稍后再通知我');
  152. }
  153. }else{
  154. return $fail('通信失败,请稍后再通知我');
  155. }
  156. });
  157. $response->send();
  158. }catch (Exception $e) {
  159. $this->error('页面不存在');
  160. }
  161. }
  162. }