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



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

一、有言在先

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

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

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

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

      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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值