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

本文涉及的产品
.cn 域名,1个 12个月
简介: 本文介绍了微信支付的多种方式,包括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'=>'操作失败')));
  }
}


目录
相关文章
|
1月前
|
PHP 开发工具 开发者
Xdebug在PHP中的应用
Xdebug 是一款非常实用的 PHP 调试工具,它为开发者提供了丰富的功能和便利,帮助开发者更高效地进行调试工作。熟练掌握 Xdebug 的使用方法,对于提高 PHP 开发质量和效率具有重要意义。
31 1
|
24天前
|
PHP 开发者 UED
PHP中的异常处理:理解与应用
在编程的世界中,错误和异常就像是不请自来的客人——总是在你最不希望它们出现的时候敲门。对于PHP开发者来说,学会优雅地处理这些“不速之客”是提升代码质量和用户体验的关键。本文将带你深入理解PHP中的异常处理机制,通过实际的代码示例,展示如何捕获、处理以及自定义异常,让你的应用程序更加健壮和灵活。准备好迎接挑战,让我们共同探索PHP异常处理的奥秘吧!
98 66
|
23天前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
27 1
|
27天前
|
PHP
20241125易支付PHP网站源码
PHP74,上传源码后解压访问域名/install 进行安装 安装完成 之后一定要设置伪静态 源码里面nginx.txt 就是伪静态 然后复制粘贴到伪静态里面保存即可
41 2
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
40 5
|
1月前
|
SQL 安全 数据挖掘
PHP表单的多方面应用与实践
通过本文的介绍,我们详细探讨了PHP表单的多方面应用与实践。从表单创建、数据验证、安全性、文件上传到多步表单处理,每个方面都有具体的示例和说明。通过掌握这些技术,开发者可以有效地处理表单数据,确保应用的安全性和可靠性。希望本文能为您在PHP开发中提供有价值的参考和指导。
29 2
|
1月前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
1月前
|
IDE PHP 开发工具
【PHP开发专栏】Xdebug在PHP调试中的应用
Xdebug 是一个功能强大的 PHP 扩展,提供调试、代码分析和性能分析等功能。本文介绍了 Xdebug 的基本概念、安装配置方法及在 PHP 调试中的应用技巧,包括断点调试、堆栈跟踪、远程调试和性能分析等。通过合理使用 Xdebug,可以显著提高调试效率和代码质量。
42 3
|
1月前
|
安全 编译器 PHP
PHP 8新特性解析与实践应用####
————探索PHP 8的创新功能及其在现代Web开发中的实际应用
|
1月前
|
存储 缓存 开发框架
提高微信小程序的应用速度
【10月更文挑战第21天】提高微信小程序的应用速度需要从多个方面入手,综合运用各种优化手段。通过不断地优化和改进,能够显著提升小程序的性能,为用户带来更流畅、更高效的使用体验。
59 3