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'=>'操作失败')));
  }
}


相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
3天前
|
设计模式 监控 中间件
PHP中的中间件模式及其应用
【6月更文挑战第24天】在PHP开发中,中间件是一种设计模式,它允许开发者在请求处理流程的不同阶段插入自定义的处理逻辑。本文将介绍PHP中间件的概念、实现方式以及如何利用中间件提高代码的可维护性和扩展性。通过实际案例,我们将探索中间件在身份验证、日志记录和性能监控等方面的应用,并讨论如何在Laravel框架中有效使用中间件。
|
1天前
|
PHP 开发工具
php免费用免认证的微信支付宝支付
php免费用免认证的微信支付宝支付
9 5
|
1天前
|
PHP
php使用curl新增微信临时素材(上传图片)
php使用curl新增微信临时素材(上传图片)
8 4
|
2天前
|
设计模式 数据库连接 PHP
PHP中的面向对象编程与设计模式应用
传统的PHP编程模式在面向对象的趋势下逐渐演进,本文探讨了面向对象编程在PHP中的应用,并深入分析了常用的设计模式如何优化代码结构和可维护性。
|
3天前
|
设计模式 中间件 API
PHP中的中间件模式及其应用
【6月更文挑战第24天】在现代Web开发中,设计模式的应用是提高代码可维护性和扩展性的关键。本文将深入探讨PHP中中间件模式的概念、实现方式以及在实际项目中的应用案例,旨在为开发者提供一种灵活处理HTTP请求和响应的有效手段。
|
13天前
|
PHP
PHP微信公众号投票活动系统源码
PHP微信公众号投票活动系统源码
50 11
|
6天前
|
关系型数据库 MySQL 数据库连接
蓝易云 - PHP基本语法解析与应用指南
以上只是PHP基本语法的简要概述,要深入了解和掌握PHP,你需要阅读更多的教程和参考资料,并通过实践来提高你的技能。
18 2
|
8天前
|
存储 安全 PHP
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
|
14天前
|
存储 Linux PHP
PHP云盘网盘系统源码+快速对接多家云存储+全新一键安装版
快速对接多家云存储,支持七牛、又拍云、阿里云OSS、AWS S3、Onedrive、自建远程服务器,当然,还有本地存储。 自定义主题配色。 图片、音频、视频、文本、Markdown、Ofiice文档 在线预览。 移动端全站响应式布局。 文件、目录分享系统,可创建私有分享或公开分享链接。 用户个人主页,可查看用户所有分享。 多用户系统、用户组支持。 初步完善的后台,方便管理。 拖拽上传、分片上传、断点续传、下载限速(*实验性功能)。 多上传策略,可为不同用户组分配不同策略。 用户组基础权限设置、二步验证。 WebDAV协议支持。
18 2
|
16小时前
|
存储 程序员 API
老程序员分享:PHP对接饿了么开放平台【企业】接单
老程序员分享:PHP对接饿了么开放平台【企业】接单