注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

微信支付接口 JS HTML5 返回 get_brand_wcpay_request:fail 错误(prepay_id正确)(扫码支付)  

2016-03-31 22:25:19|  分类: 微信支付宝开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
前面我专门写过一篇文章:说明微信开发中的问题。详见《微信支付开发、微信卡券接口开发(system:access_denied 、paySignKey(paySignkey 没找到)、微信支付( fail_invalid signature) 发货接口)》

不过,在众多问题中,“get_brand_wcpay_request:fail ” 是比较突出的,因为按官方的话说是:前端环境复杂,任何小错误,比如:参数不正确、用户取消支付等。都 统一报“get_brand_wcpay_request:fail”,但这对于开发者来说,却是恶梦了,
出了错,找不到原因呀!!!
现在,我们就例一下,这个产生这个错的常见问题,一一排查即可。
1 首先确定你创建prepay_id 的加密算法完全正确(虽然,难但没有办法,你只有一步步做)。
   (这里要注意:正确使用 "微信公众号的APPID"、“微信支付商户号)”、"微信支付的API密钥")  

2 prepay_id 能正常获取到后,你需要设置微支付的相关目录了,有几个地方(如下面的图所示):\

微信支付接口 JS HTML5 返回 get_brand_wcpay_request:fail 错误(prepay_id正确) - fc_lamp - @fc_lamp


微信支付接口 JS HTML5 返回 get_brand_wcpay_request:fail 错误(prepay_id正确) - fc_lamp - @fc_lamp


微信支付接口 JS HTML5 返回 get_brand_wcpay_request:fail 错误(prepay_id正确) - fc_lamp - @fc_lamp


这几个地址,注意填写正确(注意:只有通过了ICP备案的域名才有效)

3 再确定你的发起支付的JS参正确(注意大小写、引号等),PHP中一般为:

$t =time();
$jsApiObj = array();
$jsApiObj["appId"] = $this->appid;
$jsApiObj["timeStamp"] = "$t";
$jsApiObj["nonceStr"] = md5(uniqid());
$jsApiObj["package"] = "prepay_id={$sendData['prepay_id']}";
$jsApiObj["signType"] = "MD5";
$jsApiObj["paySign"] = $this->buildMysign($jsApiObj, $this->payMInfo['partner_key']);
$parameters = json_encode($jsApiObj);


buildMysign 函数:

/**
* 生成签名结果
* @param $sort_para 要签名的数组
* @param $key 支付宝交易安全校验码
* @param $sign_type 签名类型 默认值:MD5
* return 签名结果字符串
*/
private function buildMysign($sort_para,$key)
{
$sort_para = $this->argSort($sort_para);

//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
//$prestr = http_build_query($sort_para);
$prestr = '';//中文问题
foreach ($sort_para as $k => $v)
{
$prestr .= $k . "=" . $v . "&";
}

$prestr = substr($prestr, 0, strlen($prestr)-1);

//把拼接后的字符串再与安全校验码直接连接起来
$prestr = $prestr."&key=$key";
//echo $prestr.'<br/><br/>';
//把最终的字符串签名,获得签名结果
$mysgin = md5($prestr);

//转成大写
$mysgin = strtoupper($mysgin);

//echo $mysgin;exit;

return $mysgin;
}




 4 支付目录设置正确、加密正确后,再确定公众号的支付权限是否有:
一般是你的公众号没有支付的权限,具体为:
1 如果你使用 APPID与APPKEY 在所在公众号窗口下发起支付,那么是此公众号没有支付权限。
2 如果你使用APPID与APPKEY不是所在公众窗口(即使用A 公众号的APPID在B公众号窗口下使用)发起支付,那么有可能是所在公众号没有权限,如没有认证等。 

5 若还有问题,请留言。
 
 

另外:微信扫码支付
我们使用第二种方式,更简单。具体参考:
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
实际上就是使用统一下单接口中的:code_url 就OK了。






 
  评论这张
 
阅读(641)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017