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

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

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;

}

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

时间: 2024-11-02 09:42:03

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

C#开发微信门户及应用(35)--微信支付之企业付款封装操作

在前面几篇随笔,都是介绍微信支付及红包相关的内容,其实支付部分的内容还有很多,例如企业付款.公众号支付或刷卡支付.摇一摇红包.代金券等方面的内容,这些都是微信接口支持的内容,本篇继续微信支付这一主题,继续介绍微信支付中的企业付款的操作,实现对企业付款API的接口C#代码的封装,以及测试效果. 1.企业付款的介绍 所谓企业付款指的是,在功能开放后诸如保险行业的客户理赔.退保.商品退款.发放征集活动奖金.抽奖互动等操作都可以通过企业付款完成.而此前,微信支付只能提供客户向企业单向付款. 商户如果需要

微信支付 &amp;amp;quot;企业付款&amp;amp;quot; 接口

问题描述 微信支付 "企业付款" 接口 有没有人写过这个接口啊, 要双向认证,用微信提供的Dome,老是报签名错误,参数我都一个个的对过,没问题,也不是签名规则的问题,,,,,,,头疼死了, 解决方案 微信支付商户平台,企业付款,企业向个人付款接口总结 解决方案二: 企业付款 api等,参考一下 https://pay.weixin.qq.com/wiki/doc/api/mch_pay.php?chapter=14_1

微信公众平台开发(111) 现金红包、裂变红包、企业付款

关键字:微信公众平台 微信红包 现金红包 裂变红包 企业付款 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/wxpay-mkt-transfer.html    在这篇微信公众平台开发教程中,我们将介绍如何在实现现金红包.裂变红包.企业付款以及红包交易查询(含现金红包和裂变红包)和企业付款查询的功能. 本文分为以下二个部分: 微信支付接口SDK定义 现金红包.裂变红包.企业付款的调用方法 本文源代码下载为收费服务,二维码在底部!   一.微信红包SDK

微信 企业向用户付款一直提示系统繁忙

问题描述 微信 企业向用户付款一直提示系统繁忙 <![CDATA[FAIL]]><![CDATA[系统繁忙,请稍后再试.]]><![CDATA[FAIL]]><![CDATA[268458375]]><![CDATA[系统繁忙,请稍后再试.]]> 解决方案 你这是和什么系统通讯返回给你的.你的服务器是不是没有收到响应 解决方案二: 这个是直接访问的微信企业支付地址,而且那些信息时微信反馈回来的数据信息

微信商户付款到用户零钱api求解。

问题描述 asp.net微信商户付款到用户零钱api,本地测试成功,然后放到线上去出问题了,经测试,是证书的原因,不带证书post有返回结果,带证书post就一直转圈,多刷新几遍程序池自己关了...证书已经上传到服务器上,也已经安装了,路径和本地一致,又试了下写项目路径也是不行,到底是什么原因呢,有做过的大哥帮忙看看谢谢. 解决方案 解决方案二:有人做过吗谢谢解决方案三: 解决方案四: 解决方案五:多刷新几遍程序池自己关了这个应该是短期内出错5次导致IIS不再重启吧你可以在日志管理器看下有没有错

解密-微信企业平台第三方应用授权接口问题

问题描述 微信企业平台第三方应用授权接口问题 获取suite_ticket时,解密出来是乱码,提示-40005错误,请问怎么解决 解决方案 微信第三方平台授权流程----------------------

在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法_基础知识

最近在使用微信.支付宝.百度钱包实现网页支付,对支付成功将自动关闭页面,对于支付失败,将显示错误信息.当在错误页面的时候,点击返回或者Android物理按键上一步的时候,将关闭页面. 在微信.支付宝.百度钱包中,他们对页面关闭进行了封装,传统的window.close()是无效的,必须要使用它们的js代码才能关闭. 下面是三种移动app的关闭方式: WeixinJSBridge.call('closeWindow');//微信 AlipayJSBridge.call('closeWebview'

android-钱包付款时用钱包剩余的钱比一下付款的钱如果钱不够就提示充值怎么做;

问题描述 钱包付款时用钱包剩余的钱比一下付款的钱如果钱不够就提示充值怎么做: android中 钱包付款时用钱包剩余的钱比一下付款的钱如果钱不够就提示充值怎么做: 本人是新手可能太小白希望大家耐心解答 解决方案 一个edittext 输入要付的钱 跟 钱包的 钱相比 不够就 提示充值 解决方案二: if(剩余的钱<付款的钱){ request.setAttribute("result","钱不够,请充值") } 解决方案三: 我传送过来的值都是String的S

中韩游戏企业频繁的交流互动引发了各方广泛关注

近一段时间,中韩游戏企业频繁的交流互动引发了各方广泛关注,香港媒体对此也进行了报道.11月22日,<香港商报>就特别撰文分析中韩游戏产业发展动态,称"中韩有望携手共推下一代互联网娱乐". 该报首先对近期 完美世界 在韩国发布全球化发展战略的新闻事件进行了报道.并对完美世界未来"通过全球化投资等方式,加强在韩国的投资,与韩国方面合作共同开发下一代全球化互联网娱乐技术"的做法进行了分析. 分析认为:"完美世界是中国游戏"走出去"