为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
PHP

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

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.'</br>';

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

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

//echo "【string2】".$String."</br>";

//签名步骤三:MD5加密

$String = md5($String);

//echo "【string3】 ".$String."</br>";

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

$result_ = strtoupper($String);

//echo "【result】 ".$result_."</br>";

return $result_;

}

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

//数组转XML

function arrayToXml($arr)

{

$xml = "<xml>";

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

if (is_numeric($val)){

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

}else{

$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";

}

}

$xml.="</xml>";

return$xml;

}

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

图片描述

点击查看更多内容
12人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
85
获赞与收藏
1150

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消