首页 > 后端开发 > php教程 > PHP实现微信公众号开发之微信红包的方法

PHP实现微信公众号开发之微信红包的方法

墨辰丷
发布: 2023-03-26 21:02:01
原创
2037 人浏览过

这篇文章主要介绍了PHP微信公众号开发之微信红包实现方法,结合实例形式分析了php实现微信公众号红包发送功能的实现思路、步骤与具体操作技巧,需要的朋友可以参考下

本文实例讲述了PHP微信公众号开发之微信红包实现方法。分享给大家供大家参考,具体如下:

这几天遇到了一个客户 要给他们的微信公众平台上添加微信现金红包功能,是个二次开发的功能,顺手百度一下,原来不复杂。就着手开发功能了。现将开发的过程和需求贴出来分享一下:

一.需求:

粉丝通过在客户的公众平台点击他们公司的订单,然后给这个订单返现五元,发到订单的这个微信号上。

二.开发想法:

1:先拿到关注这个粉丝的openid,openid是关注某个公众号的微信标识,这样就可以定位到这个人是订单的操作者了。

2:发送xml数据请求微信服务器。

代码有两个php文件

1.oauth2.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

$code=$_GET[&#39;code&#39;];

$state=$_GET[&#39;state&#39;];

$appid=&#39;XXXX&#39;;

$appsecret=&#39;XXXXXXXX&#39;;//

if (empty($code)) $this->error(&#39;授权失败&#39;);

$token_url=&#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;.$appid&#39;&secret=&#39;.$appsecret.&#39;&code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;

$token=json_decode(file_get_contents($token_url));

if (isset($token->errcode)) {

echo &#39;<h1>错误1</h1>&#39;.$token->errcode;

echo &#39;<br/><h2>错误信息1:</h2>&#39;.$token->errmsg;

exit;

}

session_start();

$_SESSION[&#39;openid&#39;]= $token->openid;

header(&#39;location:http://www.XXXXXXX.com/XXXXX/XXXXXX/XXXXXX/hongbao.php&#39;);//要跳转的文件路径

?>

登录后复制

2.hongbao.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

<?php

//XXXXX。。是需要开发者自己填写的内容,注意不要泄密

 // 从session中获取到openid;

$openid=$_SESSION["openid"];

    if(empty($openid))

    {

header(&#39;location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXX&redirect_uri=http://www.XXXXXXX.com/oauth2.php&respose_type=code&scope=snsapi_base&state=XXXX&connect_redirect=1#wechat_redirect&#39;);

    }

}

// 关键的函数

public function weixin_red_packet(){

  // 请求参数

  // 随机字符串

  $data[&#39;nonce_str&#39;]=$this->get_unique_value();

  //商户号,输入你的商户号

  $data[&#39;mch_id&#39;]="XXXXXXX";

  //商户订单号,可以按要求自己组合28位的商户订单号

  $data[&#39;mch_billno&#39;]=$data[&#39;mch_id&#39;].date("ymd")."XXXXXX".rand(1000,9999);

  //公众帐号appid,输入自己的公众号appid

  $data[&#39;wxappid&#39;]="XXXXXXX";

  //商户名称

  $data[&#39;send_name&#39;]="XXXXX";

  //用户openid,输入待发红包的用户openid

  session_start();

  $data[&#39;re_openid&#39;]=$_SESSION["openid"];

  //付款金额

  $data[&#39;total_amount&#39;]="XXXX";

  //红包发放总人数

  $data[&#39;total_num&#39;]="XXXX";

  //红包祝福语

  $data[&#39;wishing&#39;]="XXXX";

  //IP地址

  $data[&#39;client_ip&#39;]=$_SERVER[&#39;LOCAL_ADDR&#39;];

  //活动名称

  $data[&#39;act_name&#39;]="XXXXX";

  //备注

  $data[&#39;remark&#39;]="XXXXX";

  // 生成签名

  //对数据数组进行处理

  //API密钥,输入自己的K 微信商户号里面的K

  $appsecret="XXXXXXXXXXXXXX"; //

  $data=array_filter($data);

  ksort($data);

  $str="";

  foreach($data as $k=>$v){

    $str.=$k."=".$v."&";

  }

  $str.="key=".$appsecret;

  $data[&#39;sign&#39;]=strtoupper(MD5($str));

  /*

    发红包操作过程:

      1.将请求数据转换成xml

      2.发送请求

      3.将请求结果转换为数组

      4.将请求信息和请求结果录入到数据库中

      4.判断是否通信成功

      5.判断是否转账成功

   */

  //发红包接口地址

  $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";

  //将请求数据由数组转换成xml

  $xml=$this->arraytoxml($data);

  //进行请求操作

  $res=$this->curl($xml,$url);

  //将请求结果由xml转换成数组

  $arr=$this->xmltoarray($res);

}

// 生成32位唯一随机字符串

private function get_unique_value(){

  $str=uniqid(mt_rand(),1);

  $str=sha1($str);

  return md5($str);

}

// 将数组转换成xml

private function arraytoxml($arr){

  $xml="<xml>";

  foreach($arr as $k=>$v){

    $xml.="<".$k.">".$v."</".$k.">";

  }

  $xml.="</xml>";

  return $xml;

}

// 将xml转换成数组

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();

  //抓取指定网页

  curl_setopt($ch, CURLOPT_URL,$postUrl);

  //设置header

  curl_setopt($ch, CURLOPT_HEADER, 0);

  //要求结果为字符串且输出到屏幕上

  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);

  //证书放到网站根目录的cert文件夹底下

  curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).DIRECTORY_SEPARATOR.

        &#39;cert&#39;.DIRECTORY_SEPARATOR.&#39;apiclient_cert.pem&#39;);

    curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).DIRECTORY_SEPARATOR.

        &#39;cert&#39;.DIRECTORY_SEPARATOR.&#39;apiient_key.pem&#39;);

    curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).DIRECTORY_SEPARATOR.

        &#39;cert&#39;.DIRECTORY_SEPARATOR.&#39;rootca.pem&#39;);

  //运行curl

  $data = curl_exec($ch);

  //关闭curl

  curl_close($ch);

  return $data;

}

?>

登录后复制

相关推荐:

JS实现微信红包随机算法(附代码)

PHP用抛物线的模型实现微信红包生成算法的程序源码

php实现微信红包代码

以上是PHP实现微信公众号开发之微信红包的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
怎么学好php
来自于 1970-01-01 08:00:00
0
0
0
PHP扩展intl
来自于 1970-01-01 08:00:00
0
0
0
php数据获取?
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板