大家好,微信支付系列教程四種方式已經(jīng)結(jié)束,如果你以為結(jié)束了就錯(cuò)了,有同學(xué)跟我提到微信還有紅包功能,我開始也沒注意這一塊,于是看了下微信商戶平臺(tái)上有講到這一塊,微信支付平臺(tái)上也早就有了,于是趁熱打鐵,研究了下,繼續(xù)發(fā)出關(guān)于微信紅包的教程文章。接下來請看微信支付發(fā)紅包之現(xiàn)金紅包教程!
現(xiàn)在微信商戶可以向指定的openid發(fā)送紅包,目前紅包分兩種:現(xiàn)金紅包和裂變紅包。本教程是關(guān)于現(xiàn)金紅包的。
在貼代碼之前,先講幾個(gè)注意點(diǎn):1.去商戶平臺(tái)里,給你的商戶充錢,沒錢是發(fā)不了紅包噠! 2.微信紅包需要證書支持,所以請大家到商戶平臺(tái)下去下載好證書后放到安全文件夾下,并且需要在配置文件中指定好證書路徑!
step1:老樣子,還是介紹配置文件WxPayConf_pub.php,看過之前微信支付教程的同學(xué)應(yīng)該很清楚這一塊了,這里我將代碼截圖出來,配置好后進(jìn)行下一步!
step2:下載你的證書,放到一個(gè)目錄下,對應(yīng)配置文件中,記得這里是絕對路徑!
step3:之前的微信支付的demo微信官方已經(jīng)幫我們寫好了WxPayHelper.php這個(gè)類庫,我們可以很方便的調(diào)用就夠了,而微信紅包目前還沒有官方demo,所以這里我們得自己在WxPayHelper.php文件下寫自己的紅包支付方法:/**
?*?現(xiàn)金紅包接口
?*?@author?gaoyl101
?*/
class?Redpack_pub?extends?Wxpay_client_pub
{
????var?$code;//code碼,用以獲取openid
????var?$openid;//用戶的openid
????
????function?__construct()
????{
????????//設(shè)置接口鏈接
????????$this->url?=?"https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
????????//設(shè)置curl超時(shí)時(shí)間
????????$this->curl_timeout?=?WxPayConf_pub::CURL_TIMEOUT;
????}
????/**
?????*?生成接口參數(shù)xml
?????*/
????function?createXml()
????{
????????try
????????{
????????????//檢測必填參數(shù)
????????????if($this->parameters["mch_billno"]?==?null)
????????????{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)mch_billno!"."
");
????????????}elseif($this->parameters["nick_name"]?==?null){
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)nick_name!"."
");
????????????}elseif?($this->parameters["send_name"]?==?null?)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)send_name!"."
");
????????????}elseif?($this->parameters["total_amount"]?==?null)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_amount!"."
");
????????????}elseif($this->parameters["min_value"]?==?null){
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)min_value!"."
");
????????????}elseif?($this->parameters["max_value"]?==?null?)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)max_value!"."
");
????????????}elseif?($this->parameters["total_num"]?==?null)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_num!"."
");
????????????}elseif?($this->parameters["wishing"]?==?null)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)wishing!"."
");
????????????}elseif?($this->parameters["act_name"]?==?null)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)act_name!"."
");
????????????}elseif?($this->parameters["remark"]?==?null)?{
????????????????throw?new?SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)remark!"."
");
????????????}
????????????$this->parameters["wxappid"]?=?WxPayConf_pub::APPID;//公眾賬號ID
????????????$this->parameters["mch_id"]?=?WxPayConf_pub::MCHID;//商戶號
????????????$this->parameters["client_ip"]?=?$_SERVER['REMOTE_ADDR'];//終端ip
????????????$this->parameters["nonce_str"]?=?$this->createNoncestr();//隨機(jī)字符串
????????????$this->parameters["re_openid"]?=?$this->openid;//用戶openid
????????????$this->parameters["sign"]?=?$this->getSign($this->parameters);//簽名
????????????return??$this->arrayToXml($this->parameters);
????????}catch?(SDKRuntimeException?$e)
????????{
????????????die($e->errorMessage());
????????}
????}
????
????
????function?sendRedpack()
????{
????????$this->postXmlSSL();
????????$this->result?=?$this->xmlToArray($this->response);
????????return?$this->result;
????}
????
????
????
????/**
?????*?????作用:生成可以獲得code的url
?????*/
????function?createOauthUrlForCode($redirectUrl)
????{
????????$urlObj["appid"]?=?WxPayConf_pub::APPID;
????????$urlObj["redirect_uri"]?=?"$redirectUrl";
????????$urlObj["response_type"]?=?"code";
????????$urlObj["scope"]?=?"snsapi_base";
????????$urlObj["state"]?=?"STATE"."#wechat_redirect";
????????$bizString?=?$this->formatBizQueryParaMap($urlObj,?false);
????????return?"https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
????}
????
????
????
????/**
?????*?????作用:生成可以獲得openid的url
?????*/
????function?createOauthUrlForOpenid()
????{
????????$urlObj["appid"]?=?WxPayConf_pub::APPID;
????????$urlObj["secret"]?=?WxPayConf_pub::APPSECRET;
????????$urlObj["code"]?=?$this->code;
????????$urlObj["grant_type"]?=?"authorization_code";
????????$bizString?=?$this->formatBizQueryParaMap($urlObj,?false);
????????return?"https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
????}
????
????/**
?????*?????作用:通過curl向微信提交code,以獲取openid
?????*/
????function?getOpenid()
????{
????????$url?=?$this->createOauthUrlForOpenid();
????????//初始化curl
???????????$ch?=?curl_init();
????????//設(shè)置超時(shí)
????????curl_setopt($ch,?CURLOP_TIMEOUT,?$this->curl_timeout);
????????curl_setopt($ch,?CURLOPT_URL,?$url);
????????curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
????????curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
????????curl_setopt($ch,?CURLOPT_HEADER,?FALSE);
????????curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?TRUE);
????????//運(yùn)行curl,結(jié)果以jason形式返回
????????$res?=?curl_exec($ch);
????????curl_close($ch);
????????//取出openid
????????$data?=?json_decode($res,true);
????????$this->openid?=?$data['openid'];
????????return?$this->openid;
????}
????
????/**
?????*?????作用:設(shè)置code
?????*/
????function?setCode($code_)
????{
????????$this->code?=?$code_;
????}
}其實(shí)這里的代碼我做的并不是很好,我并沒有封裝,因?yàn)樽隽炎兗t包也會(huì)用到相似的代碼,這里做demo我就先不改了,有興趣的朋友可以在此基礎(chǔ)上繼續(xù)晚上!上面的代碼就是我們要用到的工具類,把他放在WxPayHelper.php最下面就可以了!
step4:創(chuàng)建控制器WxCashRedPackController
控制器中的代碼:
1.引入WxPayHelper.php類庫/**
?????*?初始化
?????*/
????public?function?_initialize()
????{
????????//引入WxPayPubHelper
????????vendor('WxPayPubHelper.WxPayPubHelper');
????}2.創(chuàng)建發(fā)送紅包方法:sendRedpack,這個(gè)方法就是發(fā)送紅包的具體功能代碼!/**
?????*?發(fā)送紅包
?????*/
????public?function?sendRedpack()
????{
????????//調(diào)用請求接口基類
????????$Redpack?=?new?\Redpack_pub();
????????
????????//=========步驟1:網(wǎng)頁授權(quán)獲取用戶openid============
????????//通過code獲得openid
????????if?(!isset($_GET['code']))
????????{
????????????//觸發(fā)微信返回code碼
????????????$reduct_uri?=?WEB_HOST."/index.php/Home/WxCashRedPack/sendRedpack";
????????????$url?=?$Redpack->createOauthUrlForCode($reduct_uri);
????????????Header("Location:?$url");
????????}else
????????{
????????????//獲取code碼,以獲取openid
????????????$code?=?$_GET['code'];
????????????$Redpack->setCode($code);
????????????$openid?=?$Redpack->getOpenId();
????????}
?????????
????????
????????
????????//商戶訂單號
????????$Redpack->setParameter('mch_billno',?C('WxPayConf_pub.APPID')."static");
????????//提供方名稱
????????$Redpack->setParameter('nick_name',?"gaoyl101");
????????//商戶名稱
????????$Redpack->setParameter('send_name',?"gaoyl101");
????????//用戶openid
//?????????$Redpack->setParameter('re_openid',?$parameterValue);
????????//付款金額
????????$Redpack->setParameter('total_amount',?100);
????????//最小紅包金額
????????$Redpack->setParameter('min_value',?100);
????????//最大紅包金額
????????$Redpack->setParameter('max_value',?100);
????????//紅包發(fā)放總?cè)藬?shù)
????????$Redpack->setParameter('total_num',?1);
????????//紅包祝福語
????????$Redpack->setParameter('wishing',?"現(xiàn)金紅包教程祝大家寫代碼快樂");
????????//活動(dòng)名稱
????????$Redpack->setParameter('act_name',?"現(xiàn)金紅包教程");
????????//備注
????????$Redpack->setParameter('remark',?"現(xiàn)金紅包教程祝大家寫代碼快樂");
????????//以下是非必填項(xiàng)目
????????//子商戶號??
//?????????$Redpack->setParameter('sub_mch_id',?$parameterValue);
//????????//商戶logo的url
//?????????$Redpack->setParameter('logo_imgurl',?$parameterValue);
//?????????//分享文案
//?????????$Redpack->setParameter('share_content',?$parameterValue);
//?????????//分享鏈接
//?????????$Redpack->setParameter('share_url',?$parameterValue);
//?????????//分享的圖片
//?????????$Redpack->setParameter('share_imgurl',?$parameterValue);
????????
????????
????????
????????$result?=?$Redpack->sendRedpack();
????????
????????dump($result);
????}訪問這個(gè)方法,微信就會(huì)發(fā)紅包啦
在這里我dump了微信發(fā)送紅包之后返回的結(jié)果,下面的業(yè)務(wù)邏輯就可以根據(jù)自己的需求接下去寫了,返回值的說明可以看微信紅包的接口說明,在微信支付平臺(tái)上有。
到這里微信紅包現(xiàn)金紅包代碼已經(jīng)全部結(jié)束,功能經(jīng)過測試已經(jīng)完成!
下面是成功后的紅包截圖:
之前的幾篇微信支付的教程很多同學(xué)看了之后都會(huì)遇到問題,并找到我得到了解決,個(gè)人認(rèn)為我發(fā)的文章得到了它應(yīng)有的價(jià)值,希望這篇文章也能幫到正在為發(fā)送紅包而發(fā)愁的同學(xué)!
有問題請留言,下面還會(huì)介紹微信發(fā)紅包之裂變紅包!
微信支付之jsapi:
http://www.thinkphp.cn/code/1321.html
微信支付教程掃碼模式一:
http://www.thinkphp.cn/code/1322.html
微信支付教程掃碼模式二:
http://www.thinkphp.cn/code/1323.html
微信支付教程刷卡支付:
http://www.thinkphp.cn/code/1324.html
微信裂變紅包教程:
http://www.thinkphp.cn/code/1330.html
歡迎大家吐槽,轉(zhuǎn)載請說明出處,請支持原創(chuàng),謝謝!
我們的微信開發(fā)群:422579975(已滿) 105195188(未滿),代碼已放在群文件中
歡迎大家加入討論問題
AD:真正免費(fèi),域名+虛機(jī)+企業(yè)郵箱=0元
微信是一款手機(jī)通信軟件,支持通過手機(jī)網(wǎng)絡(luò)發(fā)送語音短信、視頻、圖片和文字。微信可以單聊及群聊,還能根據(jù)地理位置找到附近的人,帶給大家全新的移動(dòng)溝通體驗(yàn),有需要的小伙伴快來保存下載體驗(yàn)吧!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號