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

简介: 企业付款到个人钱包也就是用户在微信公众平台提现可以直接打入提现者微信的钱包!但要满足:1)企业开通微信支付90天2)连续30天有交易才能开通此功能今天有幸能开发此功能,我只能说我又涨知识了!!!在我编程的这条道路上我又多见到了一些坑...

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

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

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

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

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

小梦使用的是Thinkphp3.2框架开发的这个功能,最终我结果告诉我用绝对路径,还要用到PHP的一个函数getcwd(),代码如下

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

functionarrayToXml($arr)

{

$xml= "";

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

if(is_numeric($val)){

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

}else{

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

}

}

$xml.="";

return$xml;

}

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

目录
相关文章
|
Docker 容器
gitlab推送企业微信几种方式汇总(二)
gitlab推送企业微信几种方式汇总(二)
2815 1
gitlab推送企业微信几种方式汇总(二)
|
Python
gitlab推送企业微信几种方式汇总(一)
gitlab推送企业微信几种方式汇总(一)
4191 1
gitlab推送企业微信几种方式汇总(一)
|
API C#
C# 企业微信消息推送对接
C# 企业微信消息推送对接
745 0
C# 企业微信消息推送对接
|
SQL 机器学习/深度学习 JSON
钉钉/企业微信机器人:“Github触发器”与“Issue机器人”
众所周知,在Serverless领域中,触发器是FaaS必不可少的一部分;一个FaaS平台,他的触发器数量、质量以及类型,很可能会决定这个FaaS平台是否能成为“主流”平台;因为触发器不仅仅是一种功能的体现,更是解决普遍性业务诉求的一个重要途径;目前来看,各个云厂商所提供的触发器基本上都会包括API网关触发器、对象存储触发器、时间触发器等,当然也有厂商提供一定的消息触发器、日志触发器、甚至是一些SQL相关的触发器、CDN触发器等,那么在我们的实际生产生活中,这些表面上看起来“很基础”的触发器,是否可以升级成为一个有趣的“高级触发器”呢?
493 0
|
监控 Java API
JAVA实现接入企业微信报警
JAVA实现接入企业微信报警
473 0
JAVA实现接入企业微信报警
|
自然语言处理 安全 机器人
打通 Jira 与钉钉和企业微信不再难
Jira Automation 可以通过 Webbook 将消息推送到 钉钉 和 企业微信群里内,对于项目任务延期预警与进展同步,非常有效~
924 0
打通 Jira 与钉钉和企业微信不再难
|
小程序 安全 API
.NET企业微信回调配置(数据回调URL和指令回调URL验证)(一)
.NET企业微信回调配置(数据回调URL和指令回调URL验证)
802 0
.NET企业微信回调配置(数据回调URL和指令回调URL验证)(一)
|
存储 缓存 NoSQL
利用pytest hook函数实现自动化测试结果推送企业微信
利用pytest的hook函数:pytest_runtest_makereport、pytest_terminal_summary‍、redis,实现自动收集测试结果并发送消息通知到企业微信的原理及过程
利用pytest hook函数实现自动化测试结果推送企业微信
关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
198 0
关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
|
机器人 Python
python实现gitlab推送企业微信
python实现gitlab推送企业微信
156 0
python实现gitlab推送企业微信

热门文章

最新文章