陌陌小程序实现红包功能(前端PHP实现逻辑)
更新时间:2018年7月11日08:36:51 作者:凌云科
本文主要详细介绍陌陌小程序的红包功能,以及前端PHP实现的逻辑。 有一定的参考价值。 有兴趣的男士可以参考一下。
本文分享了陌陌小程序红包功能的具体代码,供大家参考。 具体内容如下
首先说明一件事:陌陌小程序的红包功能一定要记得使用企业支付到钱包功能,不要使用陌陌的现金红包插座,否则你会后患无穷。
直接在代码上
陌陌小程序代码:
索引.js
//抢红包相关 view_moneysure: function () { var that = this; wx.request({ url: app.globalData.baseurl +'api/wxopen/applet/grab',//这个链接是后端写的 header: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: { openid: app.globalData.openid, auth: app.globalData.pcUserInfo.auth }, method: 'POST', success: function (response) { console.log(response); if (response.data.status==1){ that.setData({ paymsg: response.data.total_amount+'元n现金红包', paymsg2: '恭喜您n成功领取下单红包奖励' }) }else{ that.setData({ paymsg: '领取失败n'+response.data.msg, paymsg2: '非常抱歉n如不不明,请联系客服' }) } }, fail: function (res) { console.log(response); that.setData({ paymsg: '领取失败' }) } }) }, showHb: function () { this.setData({ showFlag: 1 }) }, openHb: function () { this.setData({ paymsg: '', paymsg2: '' }) this.view_moneysure() var _self = this; _self.setData({ _num: 1 }) setTimeout(function () { _self.setData({ _num: 0, showFlag: 0, bghide: 1 }) }, 1000) }, closeHb:function(){ this.setData({ bghide:0 }) },
wxml代码:
{{paymsg}} {{paymsg2}}
PHP代码:
/* * 企业付款到零钱 **/ public function weixin_pay_person($re_openid) { $obj = new WxopenWechatService(); // 请求参数 $data['mch_appid'] = WxopenWechatConfig::$init_config_applet['appid'];//商户号 $data['mchid'] = WxopenWechatConfig::$compay_config['mch_id'];//商户账号appid $data['nonce_str'] = $this->get_unique_value();// 随机字符串 //商户订单号,可以按要求自己组合28位的商户订单号 $data['partner_trade_no'] = $this->get_tradeno($data['mchid']); $data['openid'] = $re_openid;//用户openid $data['check_name'] = 'NO_CHECK';//校验用户姓名选项 $data['amount'] = '100';//金额,单位为分 $data['desc'] = "恭喜你得到一个红包";//企业付款描述信息 $data['spbill_create_ip'] = $obj->get_client_ip();//IP地址 $appsecret = WxopenWechatConfig::$compay_config['key']; $data['sign'] = $this->sign($data, $appsecret); //发红包接口地址 $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //将请求数据由数组转换成xml $xml = $this->arraytoxml($data); //进行请求操作 $res = $this->curl($xml, $url); //将请求结果由xml转换成数组 $arr = $this->xmltoarray($res); if (is_array($arr)) { $arr['total_amount'] = $data['amount']; } //请请求信息和请求结果录入到数据库中 // 输出请求结果数组 return $arr; } public function create_rand_money($start = 30, $end = 100) { return mt_rand($start, $end); } public function sign($params, $appsecret) { ksort($params); $beSign = array_filter($params, 'strlen'); $pairs = array(); foreach ($beSign as $k => $v) { $pairs[] = "$k=$v"; } $sign_data = implode('&', $pairs); $sign_data .= '&key=' . $appsecret; return strtoupper(md5($sign_data)); } /* * 生成32位唯一随机字符串 **/ private function get_unique_value() { $str = uniqid(mt_rand(), 1); $str = sha1($str); return md5($str); } /* * 将数组转换成xml **/ private function arraytoxml( $arr ) { $xml = ""; foreach ($arr as $k => $v) { $xml .= "" . $v . ""; } $xml .= ""; return $xml; } /* * 将xml转换成数组 **/ private function xmltoarray( $xml ) { //禁止引用外部xml实体 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA); $arr = json_decode(json_encode($xmlstring), true); return $arr; } /* * 进行curl操作 **/ private function curl( $param = "", $url ) { $postUrl = $url; $curlPost = $param; //初始化curl $ch = curl_init(); //抓取指定网页 curl_setopt($ch, CURLOPT_URL, $postUrl); //设置header curl_setopt($ch, CURLOPT_HEADER, 0); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //post提交方式 curl_setopt($ch, CURLOPT_POST, 1); // 增加 HTTP Header(头)里的字段 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); // 终止从服务端进行验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //这个是证书的位置 curl_setopt($ch, CURLOPT_SSLCERT, __DIR__ . '/cert/apiclient_cert.pem'); //这个也是证书的位置 curl_setopt($ch, CURLOPT_SSLKEY, __DIR__ . '/cert/apiclient_key.pem'); //运行curl $data = curl_exec($ch); //关闭curl curl_close($ch); return $data; } public function get_tradeno($str) { return $str . date("Ymd", time()) . date("His", time()) . rand(1111, 9999); }
别人总结的踩坑的宝贵经验:
1、红包以积分为单位,必须小于100积分,大于20000积分。
2、用户无需关注您的公众号(或服务号,下同),如果关注您的公众号,红包将通过公众号发送php红包,如果没有,则通过服务通知发送。
3、界面中的订单号由“微信支付商户号+4位年份+2位月份+2位日期+三天内不能重复的10位号码”组成,这三天为自然日。
4. 目前不支持发送随机红包,因此socket中提交的数组min_value、max_value、total_amount的三个值必须大小相同,且total_num的值必须为1。
5、随机红包可以通过自己的程序实现,从100到20000随机生成一个值,然后为前3个值设置随机结果。
6. 活动名称似乎没什么用。 注意,中层红包套接字与商户平台现金红包中的管理红包和创建红包无关。 这两个地方是用来手动发红包的。
7. 可选的4个参数目前无用,所以不要传递它们。 徽标_imgurl、共享_内容、共享_url、共享_imgurl。
8.注意签名,如果值为空,不参与签名。 最后一个附加密钥是Momo Pay的API密钥,而不是公共平台的密钥。 在商户平台->账户设置->安全设置->API安全右下角设置秘钥中设置。 第一次使用Momo Pay 需要设置。
9.中文不需要UrlEncode,Hash输入是字节字段,使用Encoding.UTF8.GetBytes获取。
10、证书强烈建议不要使用Momo官方的Demo文件访问方式。 证书应安装在系统证书存储容器中(可以通过在命令行输入certmgr查看),并设置为无法导入公钥。
11、如果使用10的方法,很容易遇到找不到证书的问题,并且要求运行程序的Windows帐户有权访问这个证书。 例如,如果双击运行控制台程序php红包,则证书将安装在当前用户的个人类别中,因此程序可以访问该证书。
如果是IIS帐户,可能需要指定应用程序池的执行帐户为指定帐户,然后证书就会安装在该帐户下。
Momo官方的demo采用的是文件访问的方式,所以不会有权限问题,需要您妥善保管证书文件和证书密钥。
通过上面的简单步骤,相信功能和实现都差不多了:
学习如何做好小程序的方法不仅仅是看文档,还要模仿,给你一个很好的链接。 堪称迄今为止最完整的陌陌小程序项目示例。
以上就是本文的全部内容。 希望对您的学习有所帮助,也希望您多多支持脚本之家。