做微信支付的时候遇到了这个纠结的问题,新版本的微信支付已经不需要paysignkey了,结果开发的时候发现还是要填写商户密钥key,说是在微信审核成功后发回的邮件中,可是找来找去也没有在邮件中找到这个参数,网上查了好多文章,都说在邮件中,可我邮件中确实没有啊,问了客服,答非所问,干脆自己在找找,终于在网上找到了这篇文章,感谢大神,终于解决了我的问题,同时也要分享出来,3.3.6的微信支付文档说的确实很少....

一、有言在先

1、俺家公众号开通微信支付时间是9月22号,所以适用文档版本号是v3.3.6,当时一不小心从微信客服那里拿到一个v2.7的文档,扑腾了1天时间,从一个个水坑里爬出来又跌入尿坑,把人坑惨了,后面找到相关人士才拿到真相,不过现在公众平台也可以下载到了~希望大家伙绕开这个坑!

2、最重要一点:此文有软广告嫌疑,慎入!先帮朋友们把评论写在这里~~~

二、需要到这些地方去扒参数

1、登录微信公众号管理后台mp.weixin.qq.com,在左侧菜单栏找到开发者中心,点开如下图就能看到AppID和AppSecret:

2、在微信支付通过之后,财付通会发3封邮件到申请人邮箱中,俺家之前开通过财付通的账户用于主站支付接口, 不过这次又新发了一个财付通账号,不过让人惊喜的是这次微信支付免了保证金,不知为啥?

点开weixinpay那封邮件就可以看到这些账号信息,把附件中pem格式的文件下载保存到web服务器上,请记下文件绝对路径,在下面代码中需要用到:

3、登录微信商户平台(mch.weixin.qq.com),去设置商户支付密钥Key:

4、登录微信公众号管理后台mp.weixin.qq.com,设置支付配置,支付测试,支付白名单

三、找到参数来配置该个类class WxPayConf

class WxPayConf

{

//=======【基本信息设置】=====================================

//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看

const APPID = "填上二、1中看到的AppID";

//受理商ID,身份标识

const MCHID = "填上二、2中看到的MCHID";

//商户支付密钥Key。审核通过后,在微信发送的邮件中查看(如果没有,可以登录微信商户平台去设置)

const KEY = "填上二、3中设置的密钥";

//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看

const APPSECRET = "填上二、1中看到的AppSecret";

//=======【JSAPI路径设置】===================================

//获取access_token过程中的跳转uri,通过跳转将code传入jsapi支付页面

const JS_API_CALL_URL = "http://www.xxx.com/wxpay/js_api_call.php";

//=======【证书路径设置】=====================================

//证书路径,注意应该填写绝对路径

const SSLCERT_PATH = "填上二、2中下载的pem文件放在服务器上的路径";

const SSLKEY_PATH = "填上二、2中下载的pem文件放在服务器上的路径";

//=======【异步通知url设置】===================================

//异步通知url,商户根据实际开发过程设定

const NOTIFY_URL = http://www.xxxx.com/wxpay/notify_url.php;

}

四、JSAPI支付

微信JS API只能在微信内置浏览器中使用,其他浏览器调用无效。

下面代码是微信官方提供的JS API支付demo

include_once("WxPayHelper/WxPayHelper.php");

//使用jsapi接口$jsApi = new JsApi();//=========步骤1:网页授权获取用户openid============//通过code获得openidif(!isWeixin()){   echo "请在微信内扫描二维码";    exit;}if (!isset($_GET['code'])){ //触发微信返回code码   $url = $jsApi->createOauthUrlForCode(WxPayConf::JS_API_CALL_URL.");    Header("Location: $url");}else{   //获取code码,以获取openid  $code = $_GET['code'];   $jsApi->setCode($code);  $openid = $jsApi->getOpenId();  }   if(empty($order)){      echo "数据错误!";      exit;   }}//=========步骤2:使用统一支付接口,获取prepay_id============//使用统一支付接口$unifiedOrder = new UnifiedOrder();//设置统一支付接口参数//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//spbill_create_ip已填,商户无需重复填写//sign已填,商户无需重复填写$unifiedOrder->setParameter("openid","$openid");//商品描述$unifiedOrder->setParameter("body","test");//商品描述//自定义订单号,此处仅作举例$timeStamp = time();$out_trade_no = timeStamp;$total_fee = 1;$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号$unifiedOrder->setParameter("total_fee",$total_fee);//总金额$unifiedOrder->setParameter("notify_url",WxPayConf::NOTIFY_URL);//通知地址$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型//非必填参数,商户可根据实际情况选填//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号//$unifiedOrder->setParameter("device_info","XXXX");//设备号//$unifiedOrder->setParameter("attach","XXXX");//附加数据//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记//$unifiedOrder->setParameter("openid","XXXX");//用户标识//$unifiedOrder->setParameter("product_id","XXXX");//商品ID$prepay_id = $unifiedOrder->getPrepayId();//=========步骤3:使用jsapi调起支付============$jsApi->setPrepayId($prepay_id);$jsApiParameters = $jsApi->getParameters();function isWeixin(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']);    $is_weixin = strpos($agent, 'micromessenger') ? true : false ;   if($is_weixin){     return true;    }else{      return false;   }}?><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>微信安全支付</title><script type="text/javascript">       //调用微信JS api 支付     function jsApiCall()        {           WeixinJSBridge.invoke(              'getBrandWCPayRequest',               <?php echo $jsApiParameters; ?>,              function(res){                  WeixinJSBridge.log(res.err_msg);                    //alert(res.err_code+res.err_desc+res.err_msg);               }           );      }               function callpay()      {           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{              jsApiCall();            }       }   </script></head><body οnlοad=""></br></br></br></br><div align="center"><button    style="width: 210px; height: 30px; background-color: #FE6714; border: 0px #FE6714 solid; cursor: pointer; color: white; font-size: 16px;"    type="button" οnclick="callpay()">贡献一下</button></div></body></html> 

将其中的微信支付参数修改成自己申请得到的,然后将网页上传到微信支付目录下,使用公众号给测试账号回复该网页地址。用户就可以实现一次JS API支付。

五、NATIVE支付

采用了官方提供的demo,native支付模式2完成

下面代码是微信官方提供的natice支付demo

include_once("WxPayHelper/WxPayHelper.php");

//使用统一支付接口   $unifiedOrder = new UnifiedOrder();        //设置统一支付接口参数    //设置必填参数    //appid已填,商户无需重复填写  //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写   //spbill_create_ip已填,商户无需重复填写   //sign已填,商户无需重复填写   $unifiedOrder->setParameter("body","贡献一分钱");//商品描述   //自定义订单号,此处仅作举例  $timeStamp = time();   $out_trade_no = WxPayConf::APPID."$timeStamp";   $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号  $unifiedOrder->setParameter("total_fee","1");//总金额   $unifiedOrder->setParameter("notify_url",WxPayConf::NOTIFY_URL);//通知地址     $unifiedOrder->setParameter("trade_type","NATIVE");//交易类型    //非必填参数,商户可根据实际情况选填  //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号    //$unifiedOrder->setParameter("device_info","XXXX");//设备号    //$unifiedOrder->setParameter("attach","XXXX");//附加数据    //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间  //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间     //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记     //$unifiedOrder->setParameter("openid","XXXX");//用户标识    //$unifiedOrder->setParameter("product_id","XXXX");//商品ID        //获取统一支付接口结果    $unifiedOrderResult = $unifiedOrder->getResult();       //商户根据实际情况设置相应的处理流程 if ($unifiedOrderResult["return_code"] == "FAIL")     {       //商户自行增加处理流程        echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";   }   elseif($unifiedOrderResult["result_code"] == "FAIL")  {       //商户自行增加处理流程        echo "错误代码:".$unifiedOrderResult['err_code']."<br>";     echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>";   }   elseif($unifiedOrderResult["code_url"] != NULL)  {       //从统一支付接口获取到code_url        $code_url = $unifiedOrderResult["code_url"];     //商户自行增加处理流程        //......    }?><!DOCTYPE HTML><html><head> <meta charset="UTF-8"> <title>微信安全支付</title></head><body>  <div align="center" id="qrcode">    </div>    <div align="center">       <p>订单号:<?php echo $out_trade_no; ?></p>    </div>    <div align="center">       <form  action="./order_query.php" method="post">            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">         <button type="submit" >查询订单状态</button>       </form>   </div>    <br>  <div align="center">       <form  action="./refund.php" method="post">         <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">         <input name="refund_fee" type='hidden' value="1">            <button type="submit" >申请退款</button>     </form>   </div>    <br>  <div align="center">       <a href="../index.php">返回首页</a>  </div></body>   <script src="./qrcode.js"></script>  <script>      if(<?php echo $unifiedOrderResult["code_url"] != NULL; ?>)     {           var url = "<?php echo $code_url;?>";           //参数1表示图像大小,取值范围1-10;参数2表示质量,取值范围'L','M','Q','H'           var qr = qrcode(10, 'M');            qr.addData(url);            qr.make();          var wording=document.createElement('p');         wording.innerHTML = "扫我,扫我";          var code=document.createElement('DIV');          code.innerHTML = qr.createImgTag();            var element=document.getElementById("qrcode");           element.appendChild(wording);           element.appendChild(code);      }   </script></html>

六、调用WxPayHelper.php存在的问题

在做开发时,官方demo 提供的wxPayHeler.php 存在部分问题,导致结果sign 错误。

使用jpapi 支付时候需要修改3

微信商户密钥key找不到的问题--转载相关推荐

  1. 生成微信配置密钥key

    直接上干货网址 https://suijimimashengcheng.51240.com/ 点击链接跳转

  2. 信支付jsapi(java版)【1】微信商户号mchid哪里找 2017年02月28日 08:45:33

    我们在开发微信支付功能的时候首先必须确定两个非常重要的参数,就是商户号mchid和商户秘钥key,那么这两个参数在哪里获取呢,请仔细阅读下面的查询方法. 一.微信支付商户号mchid的查找 1.1.登 ...

  3. 微信商户号 API 密钥、API 证书配置

    一个全新的商户号如何生成 API 密钥.API 证书的操作教程 商户号关联小程序是为了在小程序中能够使用商户号进行微信支付, 关联公众号亦如此 只是使用商户号的支付功能可以不配置 API 证书,因为 ...

  4. Java教程:如何申请Java开发微信支付中的必要参数(appid,appsecret,商户号,微信支付密钥)

    这一章我们来说下,微信开发中的一些必要参数申请,如appid,appsecret,商户号,微信支付密钥 第一步: 我们要申请微信公众服务号 链接:https://mp.weixin.qq.com/ 第 ...

  5. PHP微信商户支付 - 企业付款到零钱功能(即提现)技术资料汇总

    PHP实现微信开发中提现功能(企业付款到用户零钱) 一.实现该功能目的 这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现: 官方文档:https:/ ...

  6. 微信商户平台转账到零钱功能接入实战

    1.背景说明      2.实现过程          2.1 接入之前的准备工作          2.2 代码实现      3.注意事项以及相关说明          3.1 参数组装说明    ...

  7. linux安装微信商户证书,微信支付-证书安装+使用+CentOS+Python+Tornado

    本篇要讲的是: 如何在CentOS下通过Python+Tornado搭建的网站使用微信支付相关的接口证书的问题 官方文档:https://pay.weixin.qq.com/wiki/doc/api/ ...

  8. 微信商户发放红包接口调试经验总结

    准备工作 1.开通服务号,然后通过认证: 2.认证成功后,需要登录微信公众号,进入:服务-服务中心-商户功能,提交有关审核资料,准备好公司公章.运营人员身份证正反面.营业执照.财务资料等,提交后7个工 ...

  9. [微信] 微信商户号 资金解决方案 自动提现 关闭

    关键字:微信商户号 资金解决方案 自动提现 关闭 说起来真坑爹,有些客户能看到自动提现,有些客户看不到自动提现,找了很久,才找到问题所在. 请看: https://cloud.tencent.com/ ...

最新文章

  1. java创建临时文件夹_如何在Java中创建一个临时目录/文件夹?
  2. 关于jsb中js与c++的相互调用
  3. 【Android 插件化】VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
  4. 【数据结构与算法】之深入解析“柱状图中最大的矩形”的求解思路与算法示例
  5. android 监听屏幕是否锁屏
  6. oracle备份磁盘头,oracle asm 磁盘头数据以及备份与恢复基础篇(2)
  7. 适用于Java开发人员的Elasticsearch教程
  8. JavaScript学习随记——数组一
  9. 容器created状态_docker容器状态的转换实现
  10. 深度学习——在TensorFlow中查看和设定张量的形态
  11. iPhone 12s渲染图曝光,刘海变小了!
  12. nodefs模块的使用demo
  13. android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码...
  14. 【GIS导论】实验六 叠加分析
  15. vfp 连接mysql数据库,vfp数据库的asp连接
  16. 如何下载旧版本android NDK
  17. 教你炒股票27:回复
  18. 吃什么食物对眼睛最好
  19. 音频编码-G.711
  20. Adobe国际认证设计师证书含金量怎么样?

热门文章

  1. 《自然语言处理实战入门》 第三章 :中文分词原理及相关组件简介 ---- 语言学与分词技术简介
  2. 天津一汽丰田召回18万余辆卡罗拉、花冠EX汽车
  3. 迈克耳孙干涉、光的衍射、艾里斑、瑞利判据和光栅(大学物理笔记)
  4. Ubuntu14.04 安装CUDA7.5 + Caffe + cuDNN
  5. 云南水运统计数据及未来规划设计
  6. PHP图片上传水印代码,php上传图片并打上透明水印的代码
  7. 简易而又灵活的Javascript拖拽框架(五)
  8. 《软件测试技术大全》(第二版)目录
  9. LabVIEW sum累加for循环实例
  10. python气象绘图速成_基于Python气象数据处理与可视化分析