PHP微信红包生成代码分享

2025-05-29 0 29

本文实例为大家分享了PHP微信公众号自动发送红包API代码,分享给大家供大家参考。具体如下:

贴出核心接口代码至于数据自己填写,接口测试OK
wechat_packet.php

?

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

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185
<!--?php

/**

* 发送红包接口

* Created by PhpStorm.

* User: ADKi

* Date: 2016/4/25 0025

* Time: 15:25

*/

class wechat_packet{

private $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';//请求URL

private $mch_id;//商户号

private $weixin_appid;//公众账号appid

private $send_name;//商户名称

private $total_num = 1;//发送红包总人数

private $wishing;//红包祝福语

private $client_ip;//调用接口的机器Ip地址

private $act_name;//活动名称

private $remark;//备注信息

private $nonce_str;//随机字符串,不长于32位

private $api_password;

private $arraytoxml;//数组转xml

/**

* 公钥

*/

private $public_key = "/api/wechat/cert/apiclient_cert.pem";

/**

* 私钥

*/

private $private_key = '/api/wechat/cert/apiclient_key.pem';

/**

* ca证书

*/

private $rootca = 'api/wechat/cert/rootca.pem';

public function __construct()

{

//初始化红包设置信息

$this--->weixin_appid = C('wap_weixin_appid');

$this->mch_id = C('wechat_mch_id');

$this->send_name = C('wechat_send_name');

$this->wishing = C('wechat_wishing');

$this->act_name = C('wechat_act_name');

$this->client_ip = $_SERVER['SERVER_ADDR'];

$this->remark = C('wechat_remark');

$this->nonce_str = $this->create_nonce_str(32);

$this->api_password = C('wechat_api_password');

$inc_file = BASE_PATH.DS.'api'.DS.'wechat'.DS.'arraytoxml.php';

if(is_file($inc_file)) {

require($inc_file);

}

$this->arraytoxml = new ArrayToXML();

}

public function send_post($mch_billno,$re_openid,$total_amount){

$sign = $this->create_sign($mch_billno,$re_openid,$total_amount);

$send_array = array(

'nonce_str' => $this->nonce_str,

'mch_billno' => $mch_billno,

'mch_id' => $this->mch_id,

'wxappid' => $this->weixin_appid,

'send_name' => $this->send_name,

're_openid' => $re_openid,

'total_amount' => $total_amount,

'total_num' => $this->total_num,

'wishing' => $this->wishing,

'client_ip' => $this->client_ip,

'act_name' => $this->act_name,

'remark' => $this->remark,

'sign' => $sign,

);

$send_xml = $this->arraytoxml->toXml($send_array,'');

$data = $this->curl_post_ssl($this->url, $send_xml);

$data = $this->xmlToArray($data);

file_put_contents('adki',var_export($data,true),FILE_APPEND);

}

/*

请确保您的libcurl版本是否支持双向认证,版本高于7.20.1

*/

private 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_PROXY, '10.206.30.98');

//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

//以下两种方式需选择一种

//第一种方法,cert 与 key 分别属于两个.pem文件

//默认格式为PEM,可以注释

curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLCERT,getcwd().$this->public_key);

//默认格式为PEM,可以注释

curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLKEY,getcwd().$this->private_key);

//ca证书

curl_setopt($ch,CURLOPT_CAINFO,$this->rootca);

//第二种方式,两个文件合成一个.pem文件

//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.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\\n\\n\\n";

curl_close($ch);

return false;

}

}

//生成签名

private function create_sign($mch_billno,$re_openid,$total_amount){

$string_array = array(

'act_name' => $this->act_name,

'client_ip' => $this->client_ip,

'mch_billno' => $mch_billno,

'mch_id' => $this->mch_id,

'nonce_str' => $this->nonce_str,

're_openid' => $re_openid,

'remark' => $this->remark,

'send_name' => $this->send_name,

'total_amount' => $total_amount,

'total_num' => $this->total_num,

'wishing' => $this->wishing,

'wxappid' => $this->weixin_appid,

);

foreach ($string_array as $key => $value){

if(!empty($value)){

$stringA .= "$key=$value";

if($key != 'wxappid'){

$stringA .= '&';

}

}

}

//转成UTF-8

$stringA = $this->gbkToUtf8($stringA);

$stringSignTemp="$stringA&key=$this->api_password";

$sign = MD5($stringSignTemp);

$sign = strtoupper($sign);

return $sign;

}

//生成随机字符串

private function create_nonce_str($length){

$str = null;

$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";

$max = strlen($strPol)-1;

for($i=0;$i<$length;$i++){

$str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数

}

return $str;

}

/**

*自动判断把gbk或gb2312编码的字符串转为utf8

*能自动判断输入字符串的编码类,如果本身是utf-8就不用转换,否则就转换为utf-8的字符串

*支持的字符编码类型是:utf-8,gbk,gb2312

*@$str:string 字符串

*/

private function gbkToUtf8($str){

$charset = mb_detect_encoding($str,array('ASCII','UTF-8','GBK','GB2312'));

$charset = strtolower($charset);

if("utf-8" != $charset){

$str = iconv('UTF-8',$charset,$str);

}

return $str;

}

private function xmlToArray($postStr){

$msg = array();

$msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

return $msg;

}

}

数组转xml:arraytoxml.php

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
<!--?php

/**

* Created by PhpStorm.

* User: ADKi

* Date: 2016/4/26 0026

* Time: 12:19

*/

class ArrayToXML

{

public function toXml($data){

$xml = '<xml-->';

foreach ($data as $key => $value){

if (is_numeric($value)){

$xml .= "<".$key.">".$value."<!--".$key."-->";

}else{

$xml .= "<".$key."><!--[CDATA[".$value."]]--><!--".$key."-->";

}

}

$xml .= '';

return $xml;

}

}

重写了一下PHP下面的微信API接口,

微信红包支持,JSAPI的动态参数接口支持

http://git.oschina.net/youkuiyuan/yky_test/blob/master/class/wxapi.class.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

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342
<?php

/********************************************************

* @author Kyler You <QQ:2444756311>

* @link http://mp.weixin.qq.com/wiki/home/index.html

* @version 2.0.1

* @uses $wxApi = new WxApi();

* @package 微信API接口 陆续会继续进行更新

********************************************************/

class WxApi {

const appId = "";

const appSecret = "";

const mchid = ""; //商户号

const privatekey = ""; //私钥

public $parameters = array();

public function __construct(){

}

/****************************************************

* 微信提交API方法,返回微信指定JSON

****************************************************/

public function wxHttpsRequest($url,$data = null){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

if (!empty($data)){

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

curl_close($curl);

return $output;

}

/****************************************************

* 微信带证书提交数据 - 微信红包使用

****************************************************/

public function wxHttpsRequestPem($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_PROXY, '10.206.30.98');

//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

//以下两种方式需选择一种

//第一种方法,cert 与 key 分别属于两个.pem文件

//默认格式为PEM,可以注释

curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem');

//默认格式为PEM,可以注释

curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');

curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem');

curl_setopt($ch,CURLOPT_CAINFO,'PEM');

curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/rootca.pem');

//第二种方式,两个文件合成一个.pem文件

//curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.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;

}

}

/****************************************************

* 微信获取AccessToken 返回指定微信公众号的at信息

****************************************************/

public function wxAccessToken($appId = NULL , $appSecret = NULL){

$appId = is_null($appId) ? self::appId : $appId;

$appSecret = is_null($appSecret) ? self::appSecret : $appSecret;

//echo $appId,$appSecret;

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;

$result = $this->wxHttpsRequest($url);

//print_r($result);

$jsoninfo = json_decode($result, true);

$access_token = $jsoninfo["access_token"];

return $access_token;

}

/****************************************************

* 微信通过OPENID获取用户信息,返回数组

****************************************************/

public function wxGetUser($openId){

$wxAccessToken = $this->wxAccessToken();

$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN";

$result = $this->wxHttpsRequest($url);

$jsoninfo = json_decode($result, true);

return $jsoninfo;

}

/****************************************************

* 微信通过指定模板信息发送给指定用户,发送完成后返回指定JSON数据

****************************************************/

public function wxSendTemplate($jsonData){

$wxAccessToken = $this->wxAccessToken();

$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$wxAccessToken;

$result = $this->wxHttpsRequest($url,$jsonData);

return $result;

}

/****************************************************

* 发送自定义的模板消息

****************************************************/

public function wxSetSend($touser, $template_id, $url, $data, $topcolor = '#7B68EE'){

$template = array(

'touser' => $touser,

'template_id' => $template_id,

'url' => $url,

'topcolor' => $topcolor,

'data' => $data

);

$jsonData = json_encode($template);

$result = $this->wxSendTemplate($jsonData);

return $result;

}

/****************************************************

* 微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_base //验证时不返回确认页面,只能获取OPENID

****************************************************/

public function wxOauthBase($redirectUrl,$state = "",$appId = NULL){

$appId = is_null($appId) ? self::appId : $appId;

$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect";

return $url;

}

/****************************************************

* 微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_userinfo //获取用户完整信息

****************************************************/

public function wxOauthUserinfo($redirectUrl,$state = "",$appId = NULL){

$appId = is_null($appId) ? self::appId : $appId;

$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect";

return $url;

}

/****************************************************

* 微信OAUTH跳转指定URL

****************************************************/

public function wxHeader($url){

header("location:".$url);

}

/****************************************************

* 微信通过OAUTH返回页面中获取AT信息

****************************************************/

public function wxOauthAccessToken($code,$appId = NULL , $appSecret = NULL){

$appId = is_null($appId) ? self::appId : $appId;

$appSecret = is_null($appSecret) ? self::appSecret : $appSecret;

$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";

$result = $this->wxHttpsRequest($url);

//print_r($result);

$jsoninfo = json_decode($result, true);

//$access_token = $jsoninfo["access_token"];

return $jsoninfo;

}

/****************************************************

* 微信通过OAUTH的Access_Token的信息获取当前用户信息 // 只执行在snsapi_userinfo模式运行

****************************************************/

public function wxOauthUser($OauthAT,$openId){

$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN";

$result = $this->wxHttpsRequest($url);

$jsoninfo = json_decode($result, true);

return $jsoninfo;

}

/*****************************************************

* 生成随机字符串 - 最长为32位字符串

*****************************************************/

public function wxNonceStr($length = 16, $type = FALSE) {

$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

$str = "";

for ($i = 0; $i < $length; $i++) {

$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

}

if($type == TRUE){

return strtoupper(md5(time() . $str));

}

else {

return $str;

}

}

/*******************************************************

* 微信商户订单号 - 最长28位字符串

*******************************************************/

public function wxMchBillno($mchid = NULL) {

if(is_null($mchid)){

if(self::mchid == "" || is_null(self::mchid)){

$mchid = time();

}

else{

$mchid = self::mchid;

}

}

else{

$mchid = substr(addslashes($mchid),0,10);

}

return date("Ymd",time()).time().$mchid;

}

/*******************************************************

* 微信格式化数组变成参数格式 - 支持url加密

*******************************************************/

public function wxSetParam($parameters){

if(is_array($parameters) && !empty($parameters)){

$this->parameters = $parameters;

return $this->parameters;

}

else{

return array();

}

}

/*******************************************************

* 微信格式化数组变成参数格式 - 支持url加密

*******************************************************/

public function wxFormatArray($parameters = NULL, $urlencode = FALSE){

if(is_null($parameters)){

$parameters = $this->parameters;

}

$restr = "";//初始化空

ksort($parameters);//排序参数

foreach ($parameters as $k => $v){//循环定制参数

if (null != $v && "null" != $v && "sign" != $k) {

if($urlencode){//如果参数需要增加URL加密就增加,不需要则不需要

$v = urlencode($v);

}

$restr .= $k . "=" . $v . "&";//返回完整字符串

}

}

if (strlen($restr) > 0) {//如果存在数据则将最后“&”删除

$restr = substr($restr, 0, strlen($restr)-1);

}

return $restr;//返回字符串

}

/*******************************************************

* 微信MD5签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]

*******************************************************/

public function wxMd5Sign($content, $privatekey){

try {

if (is_null($key)) {

throw new Exception("财付通签名key不能为空!");

}

if (is_null($content)) {

throw new Exception("财付通签名内容不能为空");

}

$signStr = $content . "&key=" . $key;

return strtoupper(md5($signStr));

}

catch (Exception $e)

{

die($e->getMessage());

}

}

/*******************************************************

* 微信Sha1签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]

*******************************************************/

public function wxSha1Sign($content, $privatekey){

try {

if (is_null($key)) {

throw new Exception("财付通签名key不能为空!");

}

if (is_null($content)) {

throw new Exception("财付通签名内容不能为空");

}

$signStr = $content . "&key=" . $key;

return strtoupper(sha1($signStr));

}

catch (Exception $e)

{

die($e->getMessage());

}

}

/*******************************************************

* 将数组解析XML - 微信红包接口

*******************************************************/

public function wxArrayToXml($parameters = NULL){

if(is_null($parameters)){

$parameters = $this->parameters;

}

if(!is_array($parameters) || empty($parameters)){

die("参数不为数组无法解析");

}

$xml = "<xml>";

foreach ($arr as $key=>$val)

{

if (is_numeric($val))

{

$xml.="<".$key.">".$val."</".$key.">";

}

else

$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";

}

$xml.="</xml>";

return $xml;

}

}

后期还是会增加在一起的把这个CLASS做起来,网上资源很多,但是都是有一定基础的人去看看改改可以,对于没有接触刚刚接触的新手还是需要给予支持的。帮助用户屡屡思路。

再来一份:

首先给大家看一看这个表格:

PHP微信红包生成代码分享

根据微信高级红包接口,开发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');

}

以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

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

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP微信红包生成代码分享 https://www.kuaiidc.com/96334.html

相关文章

发表评论
暂无评论