头脑王者小程序开发代码解析

我们都知道最近很火的“头脑王者”,虽然是一款“益智答题类”小程序,但它身上却明显带着不少“游戏”的基因。

下面我来看一下头脑王者小程序的开发过程:

头脑王者小程序开发代码解析

项目中我使用的laravel框架,这里就用laravel来举例吧?

开发*--186.1312.8974微/电--*

一开始看到官方的小程序的介绍,也看了小程序的部分开发文档,本能以为微信小程序不过是一个浏览器框架,小程序也只是网页而已。

1、在小程序之后成功之后(发红包的人已将红包个数已设置好了,这里的红包金额是随机的),这个时候就会生成已经设置好金额和个数的红包列表。

  1. **  
  2.  *--------------------------------------------------------------------------  
  3.  * wechatPay [  微信支付,此处使用的是easywechat 4.*非官方包  ]  
  4.  *--------------------------------------------------------------------------  
  5.  * $config  小程序相关支付配置  
  6.  * @Author Docker  
  7.  *  
  8.  */  
  9. function wechatPay()  
  10. {   //小程序支付  
  11.     $wechatPay = Factory::payment($config);  
  12.     $result = $wechatPay->order->unify([  
  13.         'body' => '微天使乐投平台-红包充值',  
  14.         'out_trade_no' => $payment->out_trade_no,  
  15.         'total_fee' => $payment->total_fee, //单位:分  
  16.         'trade_type' => 'JSAPI',  
  17.         'openid' => $openid  
  18.     ]);  
  19.   
  20.     $prepay_id = $result['prepay_id'];  
  21.     $result = $wechatPay->jssdk->bridgeConfig($result['prepay_id'], false);  
  22.     // 生成支付订单,订单状态为null   
  23.     /* ........*/  
  24. }  
  25. /** 
  26.  *-------------------------------------------------------------------------- 
  27.  * payCallBack [ 支付回调 ] 
  28.  *-------------------------------------------------------------------------- 
  29.  * @Author Docker 
  30.  * 
  31.  * @return mixed 
  32.  */  
  33. function payCallBack()  
  34. {  
  35.     $wechatPay = Factory::payment($config);  
  36.     $response = $wechatPay->payment->handleNotify(  
  37.         function ($notify$successful) {  
  38.             //使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单  
  39.             $order = Payment::where('out_trade_no'$notify['out_trade_no'])->first();  
  40.             if (!$order  || $order->result_code === "SUCCESS") {  
  41.                 return true;  
  42.             }  
  43.             if ($notify['return_code'] === 'SUCCESS') {  
  44.                 $order->pay_time = Carbon::now()->toDayDateTimeString(); // 更新支付时间为当前时间  
  45.                 $order->status = 'PAID'//支付成功,  
  46.                 $order->save();  
  47.                /* ***************************/  
  48.                 //微信小程序支付成功后,生成红包  
  49.                 $this->inRedPackets($order);  
  50.                 /* ***************************/  
  51.             } else {  
  52.                 $order->status = 'PAID_FAIL'//待付款  
  53.                 $order->save();  
  54.             }  
  55.   
  56.             return true;  
  57.         });  
  58.     return $response;  
  59.   
  60. }  
  61.  */  
  62. function inRedPackets($packet)  
  63. {  
  64.     //检查此红包是否已经生成红包记录  
  65.     if (Redis::exists('BOUNCE_GENERATOR_' . $packet->unique_id)) {  
  66.         return false;  
  67.     }  
  68.     $array = $this->generatePacket($packet->money, $packet->number, 100);  
  69.     shuffle($array);  
  70.     foreach ($array as $key => $value) {  
  71.         Redis::lpush('BOUNCE_GENERATOR_' . $packet->unique_id, $value);  
  72.     }  
  73.     return true;  
  74. }  
  75.   
  76.   
  77. /** 
  78.  *-------------------------------------------------------------------------- 
  79.  * generatePacket [ 红包金额算法 ] 
  80.  *-------------------------------------------------------------------------- 
  81.  * @Author Docker 
  82.  * 
  83.  * @param $total_money 
  84.  * @param $number 
  85.  * @param $per 
  86.  */  
  87. function generatePacket($total_money ,$number$per)  
  88. {  
  89.     //不同红包类型,红包金额的生成方式不一样,此处使用随机生成  
  90. }  

2、将红包转发到微信群之后,现在就开始抢红包,抢不完的24小时后退款,抢完了,给金主发小程序服务通知;

  1. /** 
  2.  *-------------------------------------------------------------------------- 
  3.  * grabRedPacket [ 抢红包并企业付款 ] 
  4.  *-------------------------------------------------------------------------- 
  5.  * @Author Docker 
  6.  * 
  7.  * @param Request $request 
  8.  * @return string 
  9.  */  
  10. function grabRedPacket($packet)  
  11. {   //是否领取过红包(同一个群、同一个人、同一份红包)  
  12.         //  未领取过  查看是否已领取完  没领取过--抢红包  
  13.         //  领取过 【提醒已领取过】  
  14.     //显示该红包的领取记录  
  15.   
  16.     //未领取过--现在开始使用redis  
  17.     $bounce_money = (int)(Redis::lpop('BOUNCE_GENERATOR_' . $packet->unique_id));  
  18.     //企业付款  
  19.     $job = (new \App\Jobs\Payment($bounce_money)->onQueue('PACKET.payment');  
  20.     dispatch($job);   
  21.   
  22.     //抢完红包后,给金主发小程序服务消息  
  23.     if (!Redis::exists('BOUNCE_GENERATOR_' . $packet->unique_id)) {  
  24.         $job = (new \App\Jobs\PacketDrawedOver($packet->unique_id, $this->getAccessToken()))->onQueue('pushMessageWx')->delay(2);//推迟两秒执行  
  25.         dispatch($job);  
  26.     }  
  27.   
  28.   
  29. }  
  30.   
  31. /** 
  32.  *-------------------------------------------------------------------------- 
  33.  * enterprisePay [ 企业付款队列 ] 
  34.  *-------------------------------------------------------------------------- 
  35.  * @Author Docker 
  36.  * 
  37.  */  
  38. function enterprisePay()  
  39. {  
  40.     $config = [  
  41.         // 必要配置  
  42.         'app_id'             => 'xxxx',  
  43.         'mch_id'             => 'your-mch-id',  
  44.         'key'                => 'key-for-signature',   // API 密钥  
  45.         // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)  
  46.         'cert_path'          => '/path/to/your/cert.pem'// XXX: 绝对路径!!!!  
  47.         'key_path'           => '/path/to/your/key',      // XXX: 绝对路径!!!!  
  48.         // 将上面得到的公钥存放路径填写在这里  
  49.         'rsa_public_key_path' => '/path/to/your/rsa/publick/key/public-14339221228.pem'// <<<-----  
  50.         'notify_url'         => '默认的订单回调地址',     // 你也可以在下单时单独设置来想覆盖它  
  51.     ];  
  52.   
  53.     $app = Factory::payment($config);  
  54.     $result =  $app->transfer->toBalance([  
  55.         'partner_trade_no' => '1233455'// 商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)  
  56.         'openid' => 'oxTWIuGaIt6gTKsQRLau2M0yL16E',  
  57.         'check_name' => 'FORCE_CHECK'// NO_CHECK:不校验真实姓名, FORCE_CHECK:强校验真实姓名  
  58.         //   're_user_name' => '王小帅', 如果 check_name 设置为FORCE_CHECK,则必填用户真实姓名  
  59.         'amount' => 10000, // 企业付款金额,单位为分  
  60.         'desc' => '理赔'// 企业付款操作说明信息。必填  
  61.     ]);  
  62.     if($response['result_code'] !== "SUCCESS") {  
  63.         return "你支付失败啦";  
  64.     }  
  65.     //生成一条红包领取记录,一条插入语句,省略...  
  66.     $packet_record = PacketRecord::create(企业付款相关数据);  
  67.     return "支付成功啦";  
  68. }  

头脑王者小程序开发代码解析

没有更多推荐了,返回首页