加入收藏 | 设为首页 | 会员中心 | 我要投稿 草根网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php实现微信支 付之现金红包

发布时间:2023-02-11 12:38:01 所属栏目:PHP 来源:
导读:  网上的很多PHP微信支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信支付的带来些许帮助和借鉴意义。

  直接运行该文件即可给指定的微信
  网上的很多PHP微信支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信支付的带来些许帮助和借鉴意义。
 
  直接运行该文件即可给指定的微信用户发送现金红包。
 
  需要注意的事项:
 
  1.微信现金红包要求必传证书,需要到 账户中心->账户设置->API安全->下载证书,然后修改代码中的证书路径
 
  2.默认的使用场景是抽奖(即scene_id参数为PRODUCT_2),额度是1-200元,所以测试时的最低金额是1元。如需修改在产品中心->产品大全->现金红包->产品设置中修改
 
  3.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置。
 
  4.如提示签名错误可以通过微信支付签名验证工具进行验证:
 
  5.错误码参照 :
 
  代码如下:
 
  账户设置->API安全->下载证书,证书路径在第214行和217行修改 * 2.默认的使用场景是抽奖(即scene_id参数为PRODUCT_2),额度是1-200元,所以测试时的最低金额是1元。如需修改在产品中心->产品大全->现金红包->产品设置中修改 * 3.错误码参照 :https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3 */ header('Content-type:text/html; Charset=utf-8'); $mchid = 'xxxxx'; //微信支付商户号 PartnerID 通过微信支付商户资料审核后邮件发送 $appid = 'xxxxx'; //微信支付申请对应的公众号的APPID $appKey = 'xxxxx'; //微信支付申请对应的公众号的APP Key $apiKey = 'xxxxx'; //https://pay.weixin.qq.com 帐户设置-安全设置-API安全-API密钥-设置API密钥
  //①、获取当前访问页面的用户openid(如果给指定用户发送红包,则填写指定用户的openid)
  $wxPay = new WxpayService($mchid,$appid,$appKey,$apiKey);
  $openId = $wxPay->GetOpenid(); //获取openid
  if(!$openId) exit('获取openid失败');
  //②、发送红包
  $outTradeNo = uniqid(); //你自己的商品订单号
  $payAmount = 1; //红包金额,单位:元
  $sendName = '织梦猫'; //红包发送者名称
  $wishing = '感谢您参加猜灯谜活动,祝您元宵节快乐!'; //红包祝福语
  $act_name='猜灯谜抢红包活动'; //活动名称
  $result = $wxPay->createJsBizPackage($openId,$payAmount,$outTradeNo,$sendName,$wishing,$act_name);
  echo 'success';
 
  class WxpayService
  {
  protected $mchid;
  protected $appid;
  protected $appKey;
  protected $apiKey;
  public $data = null;
 
  public function __construct($mchid,$key)
  {
  $this->mchid = $mchid;
  $this->appid = $appid;
  $this->appKey = $appKey;
  $this->apiKey = $key;
  }
 
  /**
 
  通过跳转获取用户的openid,跳转流程如下:
  1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
  2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
  @return 用户的openid
  */
  public function GetOpenid()
  {
  //通过code获得openid
  if (!isset($_GET['code'])){
  //触发微信返回code码
  $scheme = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://';
  $baseUrl = urlencode($scheme.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
  $url = $this->__CreateOauthUrlForCode($baseUrl);
  Header("Location: $url");
  exit();
  } else {
  //获取code码,以获取openid
  $code = $_GET['code'];
  $openid = $this->getOpenidFromMp($code);
  return $openid;
  }
  }
  /**
 
  通过code从工作平台获取openid机器access_token
  @param string $code 微信跳转回来带上的code
  @return openid
  */
  public function GetOpenidFromMp($code)
  {
  $url = $this->__CreateOauthUrlForOpenid($code);
  $res = self::curlGet($url);
  //取出openid
  $data = json_decode($res,true);
  $this->data = $data;
  $openid = $data['openid'];
  return $openid;
  }
  /**
 
  构造获取open和access_toke的url地址
  @param string $code,微信跳转带回的code
  @return 请求的url
  */
  private function __CreateOauthUrlForOpenid($code)
  {
  $urlObj["appid"] = $this->appid;
  $urlObj["secret"] = $this->appKey;
  $urlObj["code"] = $code;
  $urlObj["grant_type"] = "authorization_code";
  $bizString = $this->ToUrlParams($urlObj);
  return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
  }
  /**
 
  构造获取code的url连接
  @param string $redirectUrl 微信服务器回跳的url,需要url编码
  @return 返回构造好的url
  */
  private function __CreateOauthUrlForCode($redirectUrl)
  {
  $urlObj["appid"] = $this->appid;
  $urlObj["redirect_uri"] = "$redirectUrl";
  $urlObj["response_type"] = "code";
  $urlObj["scope"] = "snsapi_base";
  $urlObj["state"] = "STATE"."#wechat_redirect";
  $bizString = $this->ToUrlParams($urlObj);
  return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
  }
  /**
 
  拼接签名字符串
  @param array $urlObj
  @return 返回已经拼接好的字符串
  */
  private function ToUrlParams($urlObj)
  {
  $buff = "";
  foreach ($urlObj as $k => $v)
  {
  if($k != "sign") $buff .= $k . "=" . $v . "&";
  }
  $buff = trim($buff,"&");
  return $buff;
  }
 

(编辑:草根网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章