微信紅包API接口(PHP)

發布時間:2015年2月25日 / 分類:WEB開發,PHP?/ 74,825?/ 241 ℃

根據微信高級紅包接口,開發PHP版本的API接口,現在進行主要代碼分析。

紅包接口調用請求代碼,所有請求參數為必填參數與文檔對應:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class?Wxapi?{
????private?$app_id?=?'wxXXXXXXXXXXXX';?//公眾賬號appid,首先申請與之配套的公眾賬號
????private?$app_secret?=?'XXXXXXXXXXXXXXXXXXXXXXXX';//公眾號secret,用戶獲取用戶授權token
????private?$app_mchid?=?'XXXXXXXX';//商戶號id
????function?__construct(){
????//do?sth?here....
????}
????/**
?????*?微信支付
?????*?@param?string?$openid?用戶openid
?????*/
????public?function?pay($re_openid)
????{
????????include_once('WxHongBaoHelper.php');
????????$commonUtil?=?new?CommonUtil();
????????$wxHongBaoHelper?=?new?WxHongBaoHelper();
????????$wxHongBaoHelper->setParameter("nonce_str",?$this->great_rand());//隨機字符串,丌長于?32?位
????????$wxHongBaoHelper->setParameter("mch_billno",?$this->app_mchid.date('YmdHis').rand(1000,?9999));//訂單號
????????$wxHongBaoHelper->setParameter("mch_id",?$this->app_mchid);//商戶號
????????$wxHongBaoHelper->setParameter("wxappid",?$this->app_id);
????????$wxHongBaoHelper->setParameter("nick_name",?'紅包');//提供方名稱
????????$wxHongBaoHelper->setParameter("send_name",?'紅包');//紅包發送者名稱
????????$wxHongBaoHelper->setParameter("re_openid",?$re_openid);//相對于醫脈互通的openid
????????$wxHongBaoHelper->setParameter("total_amount",?100);//付款金額,單位分
????????$wxHongBaoHelper->setParameter("min_value",?100);//最小紅包金額,單位分
????????$wxHongBaoHelper->setParameter("max_value",?100);//最大紅包金額,單位分
????????$wxHongBaoHelper->setParameter("total_num",?1);//紅包収放總人數
????????$wxHongBaoHelper->setParameter("wishing",?'感謝您參與紅包派發活動,祝您新年快樂!');//紅包祝福詫
????????$wxHongBaoHelper->setParameter("client_ip",?'127.0.0.1');//調用接口的機器?Ip?地址
????????$wxHongBaoHelper->setParameter("act_name",?'紅包活動');//活勱名稱
????????$wxHongBaoHelper->setParameter("remark",?'快來搶!');//備注信息
????????$postXml?=?$wxHongBaoHelper->create_hongbao_xml();
????????$url?=?'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
????????$responseXml?=?$wxHongBaoHelper->curl_post_ssl($url,?$postXml);
????????//用作結果調試輸出
????????//echo?htmlentities($responseXml,ENT_COMPAT,'UTF-8');
????$responseObj?=?simplexml_load_string($responseXml,?'SimpleXMLElement',?LIBXML_NOCDATA);
????return?$responseObj->return_code;
????}

獲取隨機字符串方法:

1
2
3
4
5
6
7
8
9
10
11
/**
?*?生成隨機數
?*/?????
public?function?great_rand(){
????$str?=?'1234567890abcdefghijklmnopqrstuvwxyz';
????for($i=0;$i<30;$i++){
????????$j=rand(0,35);
????????$t1?.=?$str[$j];
????}
????return?$t1;????
}

簽名算法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
例如:
appid:????wxd111665abv58f4f
mch_id:????10000100
device_info:??1000
Body:????test
nonce_str:??ibuaiVcKdpRxkhJA
第一步:對參數按照?key=value?的格式,并按照參數名?ASCII?字典序排序如下:
stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_i
d=10000100&nonce_str=ibuaiVcKdpRxkhJA";
第二步:拼接支付密鑰:
stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d"
sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A
9CF3B7"
*/
protected?function?get_sign(){
????define('PARTNERKEY',"QSRXXXXXXXXXXXXXXXXXXXXX");
????try?{
????????if?(null?==?PARTNERKEY?||?""?==?PARTNERKEY?)?{
???????????throw?new?SDKRuntimeException("密鑰不能為空!"?.?"<br>");
????????}
????????if($this->check_sign_parameters()?==?false)?{???//檢查生成簽名參數
???????????throw?new?SDKRuntimeException("生成簽名參數缺失!"?.?"<br>");
????????}
????????$commonUtil?=?new?CommonUtil();
????????ksort($this->parameters);
????????$unSignParaString?=?$commonUtil->formatQueryParaMap($this->parameters,?false);
????????$md5SignUtil?=?new?MD5SignUtil();
????????return?$md5SignUtil->sign($unSignParaString,$commonUtil->trimString(PARTNERKEY));
????}catch?(SDKRuntimeException?$e)
????{
????????die($e->errorMessage());
????}
}

CURL請求以及發送證書:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function?curl_post_ssl($url,?$vars,?$second=30,$aHeader=array())
{
????$ch?=?curl_init();
????//超時時間
????curl_setopt($ch,CURLOPT_TIMEOUT,$second);
????curl_setopt($ch,CURLOPT_RETURNTRANSFER,?1);
????//這里設置代理,如果有的話
????curl_setopt($ch,CURLOPT_URL,$url);
????curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
????curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);?????
????//cert?與?key?分別屬于兩個.pem文件
????//請確保您的libcurl版本是否支持雙向認證,版本高于7.20.1
????curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_cert.pem');
????curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'apiclient_key.pem');
????curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.'zhengshu'.DIRECTORY_SEPARATOR.'rootca.pem');
????if(?count($aHeader)?>=?1?){
????????curl_setopt($ch,?CURLOPT_HTTPHEADER,?$aHeader);
????}
????curl_setopt($ch,CURLOPT_POST,?1);
????curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
????$data?=?curl_exec($ch);
????if($data){
????????curl_close($ch);
????????return?$data;
????}
????else?{?
????????$error?=?curl_errno($ch);
????????//echo?"call?faild,?errorCode:$error\n";?
????????curl_close($ch);
????????return?false;
????}
}

入口文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@require?"pay.php";
//獲取用戶信息
$get?=?$_GET['param'];
$code?=?$_GET['code'];
//判斷code是否存在
if($get=='access_token'?&&?!empty($code)){
????$param['param']?=?'access_token';
????$param['code']?=?$code;
????$packet?=?new?Packet();
????//獲取用戶openid信息
????$userinfo?=?$packet->_route('userinfo',$param);
????if(empty($userinfo['openid'])){
????????exit("NOAUTH");
????}
????//調取支付方法
????$packet->_route('wxpacket',array('openid'=>$userinfo['openid']));
}else{
????$packet->_route('userinfo');
}

開發所需文檔:

1)官方紅包高級接口文檔

2)官方公眾平臺獲取用戶基本信息接口文檔

3)商戶平臺開發文檔

源碼下載:

鏈接:http://pan.baidu.com/s/1o6Nvoi2

密碼:acjp

?

轉載于:https://www.cnblogs.com/yxmaomao/p/5338875.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255643.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255643.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2016年個人技術總結(前端)

自我總結 參與項目 備注:[☆-表示比較吊的項目,-從頭開始做,^-中間加入項目] 神馬生活(微信公眾號商城)[^] 神馬學院[] <!------跳槽線--------> 大數據套件[☆][^] fable數據營銷平臺(加入新功能&#xff0c;交互)[^] fit問卷系統[] fit投放系統[] fit畫像[^] 理財通點擊…

淺談OpenCV[轉]

OpenCV是一個由Interl公司支持的開源機器視覺庫&#xff0c;關于它的介紹&#xff0c;網上隨便一搜就車載斗量。這里我不談OpenCV的主要內容&#xff0c;而是將這段時間來對它的使用心得作個簡單介紹&#xff0c;以啟發打算用這個庫的朋友的思路&#xff0c;與大家一起來分享。…

【pyqt5學習】——tablewidget控件學習

目錄 1、Table Widget 1.QTableWidget不能在mainwindow中隨主窗口的大小變化&#xff1f; 2.將表格變為禁止編輯&#xff1a; 3.設置表格為整行選擇 4.單個選中和多個選中的設置&#xff1a; 5.表格表頭的顯示與隱藏 6.對表頭文字的字體、顏色進行設置 7.在單元格里加入…

吳忠軍 - 如何理解馬云所說的月入兩三萬,三四萬的人最幸福?

這句話源于一段兩分鐘的視頻&#xff0c;馬云的一次阿里內部會議演講。 馬云坦承&#xff0c;自己從第一天起就沒想過當首富&#xff0c;還為此稀釋公司持股&#xff0c;“沒想到把自己的股份降到8%&#xff0c;還是有那么多&#xff0c;這是我沒有想到的。” 在馬云看來&#…

iOS小知識點(非UI部分)

1。 _cmd 表示當前方法的SEL指針&#xff0c; - (void)putString{} 對于這個函數_cmd 等效于selector(putString)轉載于:https://www.cnblogs.com/dongfangchun/p/5341599.html

jQuery 操作 CSS

jQuery 擁有若干進行 CSS 操作的方法。我們將學習下面這些&#xff1a; addClass() - 向被選元素添加一個或多個類removeClass() - 從被選元素刪除一個或多個類toggleClass() - 對被選元素進行添加/刪除類的切換操作css() - 設置或返回樣式屬性轉載于:https://www.cnblogs.com/…

彩色CCD相機工作原理

原理 黑白&#xff08;單色&#xff09;相機 CCD原理并不復雜。我們可以把它想象成一個頂部被打開的記憶芯片。因此光束可以射到記憶單元中。根據"光電效應”&#xff0c;這些光束在記憶單元中產生負電荷&#xff08;下圖中右上部分&#xff09;。 曝光后&…

Linux 系統常用命令匯總(二) vi 文本編輯

文本編輯vi命令作用文件名編輯文本文件&#xff0c;若文件不存在同時創建該文件Ctrlf向后翻一頁Ctrlb向前翻一頁Ctrld向后翻半頁Ctrlu向前翻半頁光標移動到下一行-光標移動到上一行數字空格光標向右移動n個字符0移動到本行首個字符處$ 移動到本行最后一個字符處H光標移動到屏幕…

圖像處理與計算機視覺:基礎,經典以及最近發展(2)圖像處理與計算機視覺相關的書籍

1. 數學 我們所說的圖像處理實際上就是數字圖像處理&#xff0c;是把真實世界中的連續三維隨機信號投影到傳感器的二維平面上&#xff0c;采樣并量化后得到二維矩陣。數字圖像處理就是二維矩陣的處理&#xff0c;而從二維圖像中恢復出三維場景就是計算機視覺的主要任務之一。這…

【HTML學習】——HTML常見標簽屬性和方法介紹

目錄 1、HTML分塊--------< div> 2、HTML段落--------< p> 3、HTML標題--------< h1>…< h6> 4、HTML鏈接--------< a> 1)< a href“http://www.baidu.com”>百度< /a>&#xff08;點擊百度&#xff0c;直接跳轉到網頁&#xf…

開發者應警惕的七種糟糕職業規劃錯誤

那些心靈雞湯式的說辭總愛美化失敗&#xff1a;失敗是成功之母啦、失敗使人成長啦、別畏懼失敗等等。但事實上&#xff0c;這種思路在軟件開發領域也許并不適用——至少不完全適用。每位開發者在職業生涯中都不可避免會遭遇失敗&#xff0c;但為什么不從他人的經驗中汲取教訓來…

Splay模板

打LCT的時候發現Splay很不熟, 因此這里貼一下模板 洛谷P3369 https://www.luogu.org/problem/show?pid3369#sub /* 提一些要注意的點: 1. 注意判斷邊界, 不要訪問到空節點 2. 每一次操作或訪問完以后, 記得要splay到root 3. insert操作只要update當前節點和父親節點即可, 因為…

圖像處理與計算機視覺 基礎、經典以及最近發展

申明&#xff1a;本文非筆者原創&#xff0c;原文轉載自&#xff1a;http://blog.csdn.net/liuyue2046/article/details/12658441 ***************************************************************************************************************************************…

【HTML學習】——一個網頁HTML編程的構成

目錄 1、html網頁構成介紹 2、HTML標簽介紹 全部的html標簽&#xff1a; HTML: HyperText Markup Language | MDNhttps://developer.mozilla.org/en-US/docs/Web/HTML 一個網頁文件一般由.html結尾的文件組成&#xff0c;主要由不同的標簽對和內容組成&#xff0c;常見的html…

hbase里插入big int數據用Phoenix查看的報錯問題

Phoenix建表create table "test_big_int"("ROW" varchar primary key,"ci"."column1" bigint) 在hbase里put數據hbase 里面進行put: put test_big_int,001,ci:column1,1 在Phoenix里進行查看&#xff08;問題出現&#xff09;第二個嘗…

機器學習:利用卷積神經網絡實現圖像風格遷移 (一)

相信很多人都對之前大名鼎鼎的 Prisma 早有耳聞&#xff0c;Prisma 能夠將一張普通的圖像轉換成各種藝術風格的圖像&#xff0c;今天&#xff0c;我們將要介紹一下Prisma 這款軟件背后的算法原理。就是發表于 2016 CVPR 一篇文章&#xff0c; “ Image Style Transfer Using Co…

jquery中attr和prop的區別

在高版本的jquery引入prop方法后&#xff0c;什么時候該用prop&#xff1f;什么時候用attr&#xff1f;它們兩個之間有什么區別&#xff1f;這些問題就出現了。 關于它們兩個的區別&#xff0c;網上的答案很多。這里談談我的心得&#xff0c;我的心得很簡單&#xff1a; ?對于…

博客園自定義樣式

碎碎念&#xff1a; 已經很長時間沒有更新過博客了&#xff0c;分析一下&#xff0c;一個是太懶了。。。所以很久沒整理一下了。還有就是嫌棄博客園默認的博客界面真的太丑了&#xff0c;作為顏控的我真的無法忍受啊。個人比較喜歡用makedown來編寫博客&#xff0c;但是博客園自…

【CSS】——cascading stylesheets層疊式樣式表

目錄 0、CSS介紹 1、CSS語句組成 2、CSS選擇器的選擇方式 1&#xff09;CSS選擇器的方式和選擇器大全&#xff1a; 2&#xff09;常見的三種方式&#xff1a; 3、添加CSS方式 1&#xff09;外部樣式表 html調用css代碼 css文件 html文件 展示 2&#xff09;內部樣式表…

四 Apache Axis2 部署 WebService

最新版本1.7.4發布日期2016-10-21 Axis2官網下載如下文件&#xff1a; axis2-1.6.2-bin&#xff1a;二進制的axis axis2-1.6.2-docs&#xff1a;幫助文檔 axis2-1.6.2-war&#xff1a;axis.war 文件 axis2-eclipse-codegen-plugin-1.6.2&#xff1a;Eclipse axis client 插件 a…