最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序?qū)崿F(xiàn)紅包功能(后端PHP實(shí)現(xiàn)邏輯)

 更新時(shí)間:2018年07月11日 08:36:51   作者:凌云客  
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)紅包功能,以及后端PHP實(shí)現(xiàn)邏輯,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了微信小程序紅包功能的具體代碼,供大家參考,具體內(nèi)容如下

首先說(shuō)明一點(diǎn):微信小程序紅包功能一定記得用企業(yè)付款到錢(qián)包功能,別用微信的現(xiàn)金紅包接口,否則你就有踩不完的坑。

直接上代碼了

微信小程序代碼:

index.js

 //搶紅包相關(guān)
 view_moneysure: function () {
  var that = this;
  wx.request({
   url: app.globalData.baseurl +'api/wxopen/applet/grab',//這個(gè)鏈接是后端寫(xiě)的 
   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現(xiàn)金紅包',
      paymsg2: '恭喜您\n成功領(lǐng)取下單紅包獎(jiǎng)勵(lì)'
     })
    }else{
     that.setData({
      paymsg: '領(lǐng)取失敗\n'+response.data.msg,
      paymsg2: '非常抱歉\n如不不明,請(qǐng)聯(lián)系客服'
     })
    }

   },
   fail: function (res) {
    console.log(response);
    that.setData({
     paymsg: '領(lǐng)取失敗'
    })
   }
  })
 },
 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代碼:

<button class="btn" bindtap="showHb">領(lǐng)紅包</button>

<view class="draw-list {{showFlag == 1? 'active':''}}">
 <image bindtap="openHb" class="{{_num==1?'active':''}}" src="http://www.17sucai.com/preview/1/2017-11-02/hb/image/open.png"></image>
</view>

<view id="receive1" class="win1 {{bghide==1?'active':''}}">
  <view class="openhb {{bghide==1?'active':''}}">
    <view class="winBody2">
      <view class="receive1-bg1">
       <view class="receive1-head">
        <text>{{paymsg}}</text>
       </view>
       <view class="receive1-body"><text>{{paymsg2}}</text></view>
       <button class="receive1-but1" bindtap="closeHb">確定</button>
       <view class="receive1-bg2"></view>
     </view>
   </view>
  </view>
</view>

PHP代碼:

/*
 * 企業(yè)付款到零錢(qián)
 **/
public function weixin_pay_person($re_openid)
{
  $obj = new WxopenWechatService();
  // 請(qǐng)求參數(shù)
  $data['mch_appid'] = WxopenWechatConfig::$init_config_applet['appid'];//商戶號(hào)
  $data['mchid'] = WxopenWechatConfig::$compay_config['mch_id'];//商戶賬號(hào)appid
  $data['nonce_str'] = $this->get_unique_value();// 隨機(jī)字符串
  //商戶訂單號(hào),可以按要求自己組合28位的商戶訂單號(hào)
  $data['partner_trade_no'] = $this->get_tradeno($data['mchid']);
  $data['openid'] = $re_openid;//用戶openid
  $data['check_name'] = 'NO_CHECK';//校驗(yàn)用戶姓名選項(xiàng)
  $data['amount'] = '100';//金額,單位為分
  $data['desc'] = "恭喜你得到一個(gè)紅包";//企業(yè)付款描述信息
  $data['spbill_create_ip'] = $obj->get_client_ip();//IP地址

  $appsecret = WxopenWechatConfig::$compay_config['key'];
  $data['sign'] = $this->sign($data, $appsecret);
  //發(fā)紅包接口地址
  $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

  //將請(qǐng)求數(shù)據(jù)由數(shù)組轉(zhuǎn)換成xml
  $xml = $this->arraytoxml($data);
  //進(jìn)行請(qǐng)求操作
  $res = $this->curl($xml, $url);
  //將請(qǐng)求結(jié)果由xml轉(zhuǎn)換成數(shù)組
  $arr = $this->xmltoarray($res);

  if (is_array($arr)) {
    $arr['total_amount'] = $data['amount'];
  }
  //請(qǐng)請(qǐng)求信息和請(qǐng)求結(jié)果錄入到數(shù)據(jù)庫(kù)中
  // 輸出請(qǐng)求結(jié)果數(shù)組
  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位唯一隨機(jī)字符串
 **/
private
function get_unique_value()
{
  $str = uniqid(mt_rand(), 1);
  $str = sha1($str);
  return md5($str);
}

/*
 * 將數(shù)組轉(zhuǎn)換成xml
 **/
private
function arraytoxml(
  $arr
) {
  $xml = "<xml>";
  foreach ($arr as $k => $v) {
    $xml .= "<" . $k . ">" . $v . "</" . $k . ">";
  }
  $xml .= "</xml>";
  return $xml;
}

/*
 * 將xml轉(zhuǎn)換成數(shù)組
 **/
private
function xmltoarray(
  $xml
) {
  //禁止引用外部xml實(shí)體
  libxml_disable_entity_loader(true);
  $xmlstring = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);
  $arr = json_decode(json_encode($xmlstring), true);
  return $arr;
}

/*
 * 進(jìn)行curl操作
 **/
private
function curl(
  $param = "", $url
) {
  $postUrl = $url;
  $curlPost = $param;
  //初始化curl
  $ch = curl_init();
  //抓取指定網(wǎng)頁(yè)
  curl_setopt($ch, CURLOPT_URL, $postUrl);
  //設(shè)置header
  curl_setopt($ch, CURLOPT_HEADER, 0);
  //要求結(jié)果為字符串且輸出到屏幕上
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  //post提交方式
  curl_setopt($ch, CURLOPT_POST, 1);
  // 增加 HTTP Header(頭)里的字段
  curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  // 終止從服務(wù)端進(jìn)行驗(yàn)證
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

  //這個(gè)是證書(shū)的位置
  curl_setopt($ch, CURLOPT_SSLCERT, __DIR__ . '/cert/apiclient_cert.pem');
  //這個(gè)也是證書(shū)的位置
  curl_setopt($ch, CURLOPT_SSLKEY, __DIR__ . '/cert/apiclient_key.pem');
  //運(yùn)行curl
  $data = curl_exec($ch);
  //關(guān)閉curl
  curl_close($ch);

  return $data;

}

public function get_tradeno($str)
{
  return $str . date("Ymd", time()) . date("His", time()) . rand(1111, 9999);
}

別人總結(jié)的相當(dāng)寶貴的踩坑經(jīng)驗(yàn):

1、紅包是以分為單位,必須大于100分,小于20000分之間。

2、用戶無(wú)需關(guān)注你的公眾號(hào)(或服務(wù)號(hào),下同),如果關(guān)注了你的公眾號(hào),紅包會(huì)通過(guò)公眾號(hào)發(fā)送,如果沒(méi)有,通過(guò)服務(wù)通知發(fā)送。

3、接口中的訂單號(hào)由“微信支付商戶號(hào)+4位年+2為月份+2位日期+10位一天內(nèi)不能重復(fù)的數(shù)字”,這個(gè)一天是自然日。

4、目前不支持發(fā)送隨機(jī)紅包,因此接口中提交的字段min_value、max_value、total_amount這3個(gè)值大小必須一樣,total_num值必須為1.

5、隨機(jī)紅包可以自己的程序?qū)崿F(xiàn),在100~20000隨機(jī)出一個(gè)數(shù)值,然后給上面3個(gè)值設(shè)定這個(gè)隨機(jī)結(jié)果。

6、活動(dòng)名稱(chēng)看起來(lái)沒(méi)用,注意高級(jí)紅包接口和商戶平臺(tái)現(xiàn)金紅包中的管理紅包和創(chuàng)建紅包無(wú)關(guān),這兩個(gè)地方是給手工發(fā)送紅包使用的。

7、可選的4個(gè)參數(shù),目前看來(lái)都沒(méi)用,不要傳。logo_imgurl, share_content, share_url, share_imgurl。

8、簽名注意,值為空的不要參與簽名。最后附加的key是微信支付的API密鑰,不是公眾平臺(tái)的密鑰,在商戶平臺(tái)->賬戶設(shè)置->安全設(shè)置->API安全右下角設(shè)置密鑰中設(shè)置,第一次使用微信支付需要設(shè)置。

9、中文不需要UrlEncode,Hash輸入是byte數(shù)組,用Encoding.UTF8.GetBytes來(lái)獲取。

10、證書(shū)強(qiáng)烈建議不采用微信官方Demo文件訪問(wèn)形式證書(shū),應(yīng)該安裝在系統(tǒng)證書(shū)存儲(chǔ)容器中(在命令行輸入certmgr可以查看),并設(shè)置為私鑰不可以導(dǎo)出。

11、如果你采用10的方式,你很容易遇到無(wú)法找到證書(shū)的問(wèn)題,要求運(yùn)行程序windows賬號(hào)有訪問(wèn)這個(gè)證書(shū)的權(quán)限。比如,如果雙擊運(yùn)行的控制臺(tái)程序,證書(shū)安裝在當(dāng)前用戶的個(gè)人類(lèi)別中,那么程序就可以訪問(wèn)證書(shū)。

  如果是IIS賬戶,你可能需要指定應(yīng)用程序池的執(zhí)行賬號(hào)為指定賬號(hào),然后這個(gè)證書(shū)安裝在這個(gè)賬號(hào)下。

  微信官方Demo采用文件的訪問(wèn)形式,就不會(huì)有權(quán)限問(wèn)題,但是要求你對(duì)證書(shū)文件保管好,以及證書(shū)密鑰保管好。

通過(guò)以上的簡(jiǎn)略步驟相信功能以及實(shí)現(xiàn)的差不多了:

學(xué)習(xí)小程序做好的方式除了看文檔就是,模仿,給大家一個(gè)好鏈接,號(hào)稱(chēng)目前為止最全的微信小程序項(xiàng)目實(shí)例

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js字符串引用的兩種方式(必看)

    js字符串引用的兩種方式(必看)

    下面小編就為大家?guī)?lái)一篇js字符串傳引用的兩種方式(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • js實(shí)現(xiàn)多個(gè)標(biāo)題吸頂效果

    js實(shí)現(xiàn)多個(gè)標(biāo)題吸頂效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)多個(gè)標(biāo)題吸頂效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • D3.js實(shí)現(xiàn)直方圖的方法詳解

    D3.js實(shí)現(xiàn)直方圖的方法詳解

    直方圖在我們平常的時(shí)候經(jīng)常見(jiàn)到,那么這篇文章給大家介紹了下如何使用D3.js實(shí)現(xiàn)直方圖,文中通過(guò)實(shí)例介紹的很詳細(xì),有需要的朋友們可以參考借鑒。
    2016-09-09
  • 微信小程序自定義彈窗wcPop插件

    微信小程序自定義彈窗wcPop插件

    平時(shí)在開(kāi)發(fā)小程序的時(shí)候,彈窗應(yīng)用場(chǎng)景還是蠻廣泛的,但是微信官方提供的彈窗比較有局限性,不能自定義修改。下面通過(guò)本文給大家?guī)?lái)了微信小程序自定義彈窗wcPop插件,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • JavaScript仿京東輪播圖效果

    JavaScript仿京東輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript仿京東輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Js和VUE實(shí)現(xiàn)跑馬燈效果

    Js和VUE實(shí)現(xiàn)跑馬燈效果

    這篇文章主要為大家詳細(xì)介紹了Js和VUE實(shí)現(xiàn)跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 淺談js中的三種繼承方式及其優(yōu)缺點(diǎn)

    淺談js中的三種繼承方式及其優(yōu)缺點(diǎn)

    下面小編就為大家?guī)?lái)一篇淺談js中的三種繼承方式及其優(yōu)缺點(diǎn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • javascript為按鈕注冊(cè)回車(chē)事件(設(shè)置默認(rèn)按鈕)的方法

    javascript為按鈕注冊(cè)回車(chē)事件(設(shè)置默認(rèn)按鈕)的方法

    這篇文章主要介紹了javascript為按鈕注冊(cè)回車(chē)事件(設(shè)置默認(rèn)按鈕)的方法,可實(shí)現(xiàn)按下回車(chē)鍵觸發(fā)按鈕按下的效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • 微信小程序?qū)崿F(xiàn)分頁(yè)加載效果

    微信小程序?qū)崿F(xiàn)分頁(yè)加載效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)分頁(yè)加載效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Layui 動(dòng)態(tài)禁止select下拉的例子

    Layui 動(dòng)態(tài)禁止select下拉的例子

    今天小編就為大家分享一篇Layui 動(dòng)態(tài)禁止select下拉的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09

最新評(píng)論

景宁| 南陵县| 修文县| 卓尼县| 周宁县| 玉山县| 中山市| 江达县| 成安县| 应城市| 九龙县| 云安县| 昌宁县| 宜章县| 虞城县| 京山县| 余庆县| 香格里拉县| 浪卡子县| 文成县| 湘潭县| 黄骅市| 崇文区| 鄂尔多斯市| 湾仔区| 黔东| 侯马市| 长阳| 醴陵市| 邹平县| 秭归县| 紫云| 淮南市| 康马县| 澄江县| 旅游| 抚顺市| 宁晋县| 台江县| 黔南| 稻城县|