栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

微信企业付款到个人钱包引发的坑之反思~

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信企业付款到个人钱包引发的坑之反思~

企业付款到个人钱包也就是用户在微信公众平台提现可以直接打入提现者微信的钱包!但要满足:

1)企业开通微信支付90天

2)连续30天有交易才能开通此功能

今天有幸能开发此功能,我只能说我又涨知识了!!!在我编程的这条道路上我又多见到了一些坑!下面就给大家讲一下今天遇到的两个坑!

1)CA证书引入问题,开发过程中遇到了CA证书验证失败的问题,百度之后网上有的说要用绝对路径,有的人说要用相对路径!

curl_setopt($curl,CURLOPT_SSLCERT,getcwd()."/cert/apiclient_cert.pem");

curl_setopt($curl,CURLOPT_SSLKEY,getcwd()."/cert/apiclient_key.pem");

curl_setopt($curl,CURLOPT_CAINFO,getcwd()."/cert/rootca.pem");

2)签名和提交数据的一致性问题:

微信签名文档上有详细的说明,但是我按照文档操作迟迟都是签名验证失败!最终总结如下注意点:

(1)key是商户设置的密匙和微信支付统一下单的密匙是一样的

(2)加密的数据顺序和提交到微信接口参数值的顺序不能改变也就是我们在 传递参数的时候直接讲数组转换成xml提交到微信api,代码如下:

$dataArr=array();

$dataArr['amount']="金额";

$dataArr['check_name']="FORCE_CHECK";

$dataArr['desc']="xxxx";

$dataArr['mch_appid']="微信公众平台的appid";

$dataArr['mchid']="商户号";

$dataArr['nonce_str']= "随机数";

$dataArr['openid']=“用户的openid”;

$dataArr['partner_trade_no']=“交易号”;

$dataArr['re_user_name']=“开启验证用户的真实姓名”;

$dataArr['spbill_create_ip']=“ip地址”;

$sign_obj = WechatSign::getInstance();

$sign = $sign_obj->getSign($dataArr);

WechatSign类文件如下:

function formatBizQueryParaMap($paraMap)

{

$buff = "";

foreach ($paraMap as $k => $v)

{

if($k != "sign" && $v != "" && !is_array($v)){

$buff .= $k . "=" . $v . "&";

}

}

$buff = trim($buff, "&");

return $buff;

}

function getSign($Obj)

{

//签名步骤一:按字典序排序参数

ksort($Obj);

//dump($Obj);

$String = $this->formatBizQueryParaMap($Obj);

//echo '【string1】'.$String.'
';

//签名步骤二:在string后加入KEY

$String = $String."&key=商户密匙";

//echo "【string2】".$String."
";

//签名步骤三:MD5加密

$String = md5($String);

//echo "【string3】 ".$String."
";

//签名步骤四:所有字符转为大写

$result_ = strtoupper($String);

//echo "【result】 ".$result_."
";

return $result_;

}

之后获取到签名之后我们直接将数组转换成xml传给微信api

//数组转XML

function arrayToXml($arr)

{

$xml = "";

foreach ($arras$key=>$val){

if (is_numeric($val)){

$xml.="<".$key.">".$val."";

}else{

$xml.="<".$key.">";

}

}

$xml.="";

return$xml;

}

就是这样简简单单的几步,因为参数位置顺序以及数据统一问题拜拜浪费了很多时间,希望哪个小伙伴调用这个接口的时候一定要注意,不要和我一样马马虎虎,简单事情复杂化,一定要好好看文档!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/229656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号