欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

直接上代碼了

微信小程序代碼:

index.js

 //搶紅包相關(guān)
 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現(xiàn)金紅包',
      paymsg2: '恭喜您\n成功領(lǐng)取下單紅包獎勵'
     })
    }else{
     that.setData({
      paymsg: '領(lǐng)取失敗\n'+response.data.msg,
      paymsg2: '非常抱歉\n如不不明,請聯(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è)付款到零錢
 **/
public function weixin_pay_person($re_openid)
{
  $obj = new WxopenWechatService();
  // 請求參數(shù)
  $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'] = "恭喜你得到一個紅包";//企業(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";

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

  if (is_array($arr)) {
    $arr['total_amount'] = $data['amount'];
  }
  //請請求信息和請求結(jié)果錄入到數(shù)據(jù)庫中
  // 輸出請求結(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位唯一隨機字符串
 **/
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實體
  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();
  //抓取指定網(wǎng)頁
  curl_setopt($ch, CURLOPT_URL, $postUrl);
  //設置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);
  // 終止從服務端進行驗證
  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);
  //關(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é)的相當寶貴的踩坑經(jīng)驗:

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

2、用戶無需關(guān)注你的公眾號(或服務號,下同),如果關(guān)注了你的公眾號,紅包會通過公眾號發(fā)送,如果沒有,通過服務通知發(fā)送。

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

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

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

6、活動名稱看起來沒用,注意高級紅包接口和商戶平臺現(xiàn)金紅包中的管理紅包和創(chuàng)建紅包無關(guān),這兩個地方是給手工發(fā)送紅包使用的。

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

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

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

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

11、如果你采用10的方式,你很容易遇到無法找到證書的問題,要求運行程序windows賬號有訪問這個證書的權(quán)限。比如,如果雙擊運行的控制臺程序,證書安裝在當前用戶的個人類別中,那么程序就可以訪問證書。

  如果是IIS賬戶,你可能需要指定應用程序池的執(zhí)行賬號為指定賬號,然后這個證書安裝在這個賬號下。

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

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

學習小程序做好的方式除了看文檔就是,模仿,給大家一個好鏈接,號稱目前為止最全的微信小程序項目實例

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript獲取隱藏dom的寬高 具體實現(xiàn)

    javascript獲取隱藏dom的寬高 具體實現(xiàn)

    一個隱藏的DOM是獲取不到寬高的,如果想要獲取,采用下面的方法:
    2013-07-07
  • JavaScript實現(xiàn)密碼框輸入驗證

    JavaScript實現(xiàn)密碼框輸入驗證

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)密碼框輸入驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 深入了解JavaScript發(fā)布訂閱模式

    深入了解JavaScript發(fā)布訂閱模式

    JavaScript?發(fā)布訂閱模式(Publish/Subscribe?Pattern)是一種常用的設計模式,發(fā)布訂閱模式的核心思想是解耦事件的發(fā)生和事件的處理,本文將介紹?JavaScript?發(fā)布訂閱模式的基本原理、應用場景以及各場景的代碼示例,需要的朋友可以參考下
    2023-05-05
  • js實現(xiàn)html table 行,列鎖定的簡單實例

    js實現(xiàn)html table 行,列鎖定的簡單實例

    下面小編就為大家?guī)硪黄猨s實現(xiàn)html table 行,列鎖定的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • javascript中的event loop事件循環(huán)詳解

    javascript中的event loop事件循環(huán)詳解

    這篇文章主要給大家介紹了關(guān)于javascript中event loop事件循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • javascript簡單鏈式調(diào)用案例分析

    javascript簡單鏈式調(diào)用案例分析

    這篇文章主要介紹了javascript簡單鏈式調(diào)用,結(jié)合具體實例形式模擬jQuery分析了鏈式調(diào)用的原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05
  • Js中Symbol的靜態(tài)屬性及用途詳解

    Js中Symbol的靜態(tài)屬性及用途詳解

    JavaScript 語言在 ES6 規(guī)范中引入了 Symbol 類型,它是一種原始數(shù)據(jù)類型,用于創(chuàng)建唯一的標識符,本文將介紹 Symbol 類型的所有靜態(tài)屬性,并舉例說明它們的用途和使用場景,希望對大家有所幫助
    2023-12-12
  • uniapp自定義頁面跳轉(zhuǎn)loading的實現(xiàn)代碼

    uniapp自定義頁面跳轉(zhuǎn)loading的實現(xiàn)代碼

    有些頁面加載起來比較慢,為了加強用戶體驗效果,所以一般都會做一個頁面加載等待的提示,頁面加載完成后消失,下面這篇文章主要給大家介紹了關(guān)于uniapp自定義頁面跳轉(zhuǎn)loading的實現(xiàn)代碼,需要的朋友可以參考下
    2023-06-06
  • 理解Javascript閉包

    理解Javascript閉包

    閉包是ECMAScript一個很重要的特征,但是卻很難用合適的定義來描述它。雖然閉包很難清晰地描述,但是,卻很容易創(chuàng)建,或者說,不小心創(chuàng)建。然而,閉包的存在其實是有一定的潛在問題的。為了避免“不小心”地創(chuàng)建閉包,以及更好地利用閉包的優(yōu)點,有必要理解閉包的機制
    2013-11-11
  • JavaScript正則函數(shù)中test和match的區(qū)別解析

    JavaScript正則函數(shù)中test和match的區(qū)別解析

    在javascript中,用于檢測一個字符串是否匹配某個模式用的比較多的就是test和match方法。,這篇文章主要介紹了js正則函數(shù)中test和match的區(qū)別,需要的朋友可以參考下
    2022-11-11

最新評論