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

php微信支付 之公众号支付功能

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

  将该文件放到你的授权

  网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义。
 
  将该文件放到你的授权目录下,并在微信里访问这个文件,即可看到演示效果。效果如下:
 
  需要注意的事项:
 
  1.该文件需放到支付授权目录下,可以在微信支付商户平台->产品中心->开发配置中设置。 2.如提示签名错误可以通过微信支付签名验证工具进行验证:
 
  代码如下:
 
  //①、获取用户openid
  $wxPay = new WxpayService($mchid,$appid,$appKey,$apiKey);
  $openId = $wxPay->GetOpenid(); //获取openid
  if(!$openId) exit('获取openid失败');
  //②、统一下单
  $outTradeNo = uniqid(); //你自己的商品订单号
  $payAmount = 0.01; //付款金额,单位:元
  $orderName = '支付测试'; //订单标题
  $notifyUrl = 'https://www.xxx.com/wx/'; //付款成功后的回调地址(不要有问号)
  $payTime = time(); //付款时间
  $jsApiParameters = $wxPay->createJsBizPackage($openId,$payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime);
  $jsApiParameters = json_encode($jsApiParameters);
  ?>
  微信支付样例-支付
  该笔订单支付金额为元钱
 
  立即支付 public function __construct($mchid,$key)
  {
  $this->mchid = $mchid; //https://pay.weixin.qq.com 产品中心-开发配置-商户号
  $this->appid = $appid; //微信支付申请对应的公众号的APPID
  $this->appKey = $appKey; //微信支付申请对应的公众号的APP Key
  $this->apiKey = $key; //https://pay.weixin.qq.com 帐户设置-安全设置-API安全-API密钥-设置API密钥
  }
  /**
 
  通过跳转获取用户的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;
  }
 

(编辑:草根网)

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

    推荐文章