PHP应用如何对接微信公众号JSAPI支付

简介: 本文介绍了微信支付的多种方式,包括JSAPI支付、APP支付、Native支付、付款码支付和H5支付。

微信支付的产品有很多,1. JSAPI支付  2. APP支付  3. Native支付  4.付款码支付  5. H5支付。 其中基于微信公众号开发的应用选择“JSAPI支付“产品,其他APP支付需要“微信开放平台”,H5支付可以在微信以后浏览器通过一个链接调起微信支付,根据自身的业务场景选择,各产品对接方式基本一致,这里主要讲公众号支付。


涉及平台:


微信商户平台

微信公众平台

 

微信商户平台的操作部分


1. 没有账号按要求提交资料审核。

2. 通过后记录mch_id,md5_key,以及下载好相关的API安全操作证书,账户中心。

3. 进入产品中心,开通对应的支付产品,比如“JSAPI支付”。

4. 找到“APPID授权管理”,点击关联更多AppID。


5. 填写公众号的AppID,或者小程序的AppID等。

6. 点击开发配置的公众号支付,添加与自己项目对应的域名及目录。

 


微信公众平台的操作部分


1. 登录公众平台,打开“公众号设置”,记录原始ID。



2. “功能设置”中,添加项目的业务域名,JS接口安全域名,网页授权域名。



3. 在自己应用中通过对接公众号需要对应的AppID,AppSecret,并把自己服务器IP为加入白名单。


4. 应用中通过接口时,生成Tonken, 和EncodingAESKey并记录下来。


5. 进入微信公众平台,打开基本配置,服务器配置,填写应用的入口地址和上面参数,最后启用即可。


 

应用程序部分


1. 前端


引入jweixin的SDK到页面中,通过一个接口地址获取预支付id,再使用SDK方法调起支付。


var ua = window.navigator.userAgent.toLowerCase();
if(paytype!=1 && ua.match(/MicroMessenger/i) == 'micromessenger') {   // 微信公众号支付
  if (typeof WeixinJSBridge == "undefined") {
    if(document.addEventListener) {
      document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
    }else if (document.attachEvent) {
      document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
      document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
    }
  }else{
    $.ajax({
      type: "GET",
      url: "{php echo $this->createMobileUrl('pay')}",
      data: {type:type,rid:rid},
      dataType: "json",
      success: function(data) {
        var jsApiParameters = data;
        console.log('FC测试: '+jsApiParameters);
        WeixinJSBridge.invoke('getBrandWCPayRequest', jsApiParameters, function(res) {
            WeixinJSBridge.log(res.err_msg);
            if(res.err_msg == "get_brand_wcpay_request:ok") {
              window.location.reload();
            }
          }
        );
      }
    });
  }
}


2. 后端

if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {      // 微信浏览器
  
  $notify_url = $_W['siteroot'].'addons/xxxxx/wxpay.php';         // 支付后的回调地址
  $model = new HcfkModel(); // 可无视
  $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";                    // 请求预下单接口
  file_put_contents(IA_ROOT."/addons/xxxxx/trade",$trade_no);
  $data["appid"] = $wechat_payment['appid'];                // 微信商户平台AppID
  $data["body"] = '对订单描述一下';
  $data["mch_id"] = $wechat_payment['mchid'];               // 微信商户平台的商户ID
  $data["nonce_str"] = $model->getRandChar(32);
  $data["notify_url"] = $notify_url;
  $data["out_trade_no"] = $trade_no;
  $data["spbill_create_ip"] = $model->get_client_ip();
  $data["total_fee"] = $money*100;
  $data["trade_type"] = "JSAPI";
  $data["openid"] = $openid;                        // 用户网页授权后的OpenID,用户对某一公众号是唯一
  $data["sign"] = $model->getSign($data,$wechat_payment['signkey']);    // 对以上请求参数进行加密,加密方式各异,大部分md5
  //echo "<pre>";print_R($data);die;
  $xml = $model->arrayToXml($data);
  $response = $model->postXmlCurl($xml, $url);
  $ress = $model->xmlstr_to_array($response);
  if($ress['return_code']=='FAIL') {
    exit(json_encode(array('code'=>0,'msg'=>$ress['return_msg'])));
  }
  if($ress['result_code']=='FAIL'){
    return $this->result(1, '操作失败',$ress['err_code'].$ress['err_code_des']);
  }
  if($ress['return_code']=='SUCCESS'){                                            // 预下单成功返回支付“需要的参数”
    $datas["appId"] = $wechat_payment['appid'];                                 // appid
    $datas["nonceStr"] = $model->getRandChar(32);                               // 32位随机串
    $datas["package"] = "prepay_id=".$ress['prepay_id'];                        // 预支付id
    $datas['signType'] = "MD5";
    $datas["timeStamp"] = time().'';
    $datas["paySign"] = $model->MakeSign($datas,$wechat_payment['signkey']);    // 签名
    exit(json_encode($datas));
  }else{
    exit(json_encode(array('code'=>0,'msg'=>'操作失败')));
  }
}


目录
相关文章
|
2月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
2月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
2月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
人工智能 关系型数据库 OLAP
303 0
|
3月前
|
存储 自然语言处理 安全
PHP-Casbin:现代化 PHP 应用的权限管理引擎
PHP-Casbin 是基于 PERM 模型的轻量级权限框架,支持 ACL、RBAC、ABAC 等多种访问控制模型,适用于 API 安全控制、企业权限管理等场景。其灵活配置、多语言协同与分布式支持,使其成为现代化 PHP 应用权限管理的首选工具。
168 0
|
4月前
|
移动开发 小程序 开发工具
揭秘微信/支付宝6大支付方式:从扫码到刷脸,谁在偷偷赚你的手续费?优雅草卓伊凡
揭秘微信/支付宝6大支付方式:从扫码到刷脸,谁在偷偷赚你的手续费?优雅草卓伊凡
853 0
揭秘微信/支付宝6大支付方式:从扫码到刷脸,谁在偷偷赚你的手续费?优雅草卓伊凡
|
5月前
|
SQL 关系型数据库 数据库连接
PHP脚本中应用while循环按照ID顺序列出数据集的技巧。
代码整体运行流程非常简单高效:连接数据库、发送查询、处理结果、关闭连接。下面的步骤是常规的PHP数据库操作流程,无需复杂处理即可实现按ID顺序列出数据集。确保代码清晰,易于理解,且可执行性强。如果在生产环境中应用这段代码,需要注意处理数据库连接的安全性、查询效率以及异常处理等。
88 16
|
5月前
|
存储 监控 NoSQL
在阿里云上构建高性能PHP应用:最佳实践指南
本文档从四个核心方面阐述了系统设计与优化的全面方案:**架构设计原则**包括分层架构(Web/逻辑/数据分离)与无状态设计(Redis会话存储、OSS文件管理);**核心服务选型**推荐高性价比的ECS、高性能Redis企业版及PolarDB数据库等;**性能优化技巧**涵盖代码层面(OPcache、Swoole框架)、数据库优化(复合索引、分库分表)以及进阶容器化和函数计算策略;**监控体系搭建**则通过云监控、ARMS应用监控、日志服务SLS等工具,确保系统稳定高效运行。
155 10
|
7月前
|
存储 监控 算法
公司员工电脑监控软件剖析:PHP 布隆过滤器算法的应用与效能探究
在数字化办公的浪潮下,公司员工电脑监控软件成为企业管理的重要工具,它能够帮助企业了解员工的工作状态、保障数据安全以及提升工作效率。然而,随着监控数据量的不断增长,如何高效地处理和查询这些数据成为了关键问题。布隆过滤器(Bloom Filter)作为一种高效的概率型数据结构,在公司员工电脑监控软件中展现出独特的优势,本文将深入探讨 PHP 语言实现的布隆过滤器算法在该软件中的应用。
135 1