php红包-陌陌小程序实现红包功能(前端PHP实现逻辑)

2023-08-29 0 274 百度已收录

陌陌小程序实现红包功能(前端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代码:

php红包-陌陌小程序实现红包功能(前端PHP实现逻辑)



 


  
    
      
       
        {{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积分。

php红包-陌陌小程序实现红包功能(前端PHP实现逻辑)

2、用户无需关注您的公众号(或服务号,下同),如果关注您的公众号,红包将通过公众号发送php红包,如果没有,则通过服务通知发送。

3、界面中的订单号由“微信支付商户号+4位年份+2位月份+2位日期+三天内不能重复的10位号码”组成,这三天为自然日。

4. 目前不支持发送随机红包,因此socket中提交的数组min_value、max_value、total_amount的三个值必须大小相同,且total_num的值必须为1。

5、随机红包可以通过自己的程序实现,从100到20000随机生成一个值,然后为前3个值设置随机结果。

6. 活动名称似乎没什么用。 注意,中层红包套接字与商户平台现金红包中的管理红包和创建红包无关。 这两个地方是用来手动发红包的。

php红包-陌陌小程序实现红包功能(前端PHP实现逻辑)

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采用的是文件访问的方式,所以不会有权限问题,需要您妥善保管证书文件和证书密钥。

通过上面的简单步骤,相信功能和实现都差不多了:

学习如何做好小程序的方法不仅仅是看文档,还要模仿,给你一个很好的链接。 堪称迄今为止最完整的陌陌小程序项目示例。

以上就是本文的全部内容。 希望对您的学习有所帮助,也希望您多多支持脚本之家。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php红包-陌陌小程序实现红包功能(前端PHP实现逻辑) https://www.wkzy.net/game/173785.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务