微信app支付遇到的问题
程序员文章站
2022-07-09 17:12:58
...
1、微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请的为v3版。V3版的微信支付没有paySignKey参数。 因为之前用的是v版,现在用的是v3版,所以在参数上发现不一致。后来看了最新文档才发现这个问题,得与时俱进啊,否则随时掉到坑里。 2、app开发文档 http://kf.qq.com/faq/120911VrYVrA150906F3qqY3.html 找了半天没找到v3的服务器端sdk,原来app的文档没游直接提供服务器端的sdk,最后发现是在微信公众号的开发文档里边,有点晕菜。 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 从这里下载对应的php服务器端sdk。 3、给客户端用的签名方法 private function getWechatpayStrByV3($total_fee,$body,$out_trade_no){ ini_set('date.timezone','Asia/Shanghai'); $notify_url = ROOT_URL."/wechatpay/notify_url_v3.php"; $input = new WxPayUnifiedOrder(); $input->SetBody($body); $input->SetOut_trade_no($out_trade_no); $input->SetTotal_fee($total_fee); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetNotify_url($notify_url); $input->SetTrade_type("APP"); $input->SetProduct_id($total_fee); $unifiedOrderResult = WxPayApi::unifiedOrder($input); if($_GET['os']=='iOS'): $timestamp = time(); else: $timestamp = $this->getMillisecond(); endif; $data = array( "appid" => $unifiedOrderResult['appid'], "partnerid" => $unifiedOrderResult['mch_id'], "prepayid" => $unifiedOrderResult['prepay_id'], "noncestr" => $unifiedOrderResult['nonce_str'], "timestamp" => (string)time(), 'package' => 'Sign=WXPay', ); //$this->getMillisecond() $input = new WxPayUnifiedOrder(); $input->SetAppid($data['appid']); $input->SetPartnerid($data['partnerid']); $input->SetPrepayid($data['prepayid']); $input->SetNoncestr($data['noncestr']); $input->SetTimestamp($data['timestamp']); $input->SetPackage($data['package']); //将下单获取的信息重新签名 $data['sign']=$input->SetSign(); return $data; } ps:ios使用的timestamp对应的值要是秒,否则会出错。这个也有点坑。 4、异步通知使用WxpayAPI_php_v3/example/notify.php 重写回调处理函数 public function NotifyProcess($data, &$msg){} 处理自己的业务即可。 5、异步通知接收不到xml 解决方式 //获取通知的数据 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; if(empty($xml)): $xml = file_get_contents("php://input"); endif; 6、curl出错,错误码:60 解决方式 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 改为 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
上一篇: activiti5.22.0资料整理
下一篇: oauth2-php&java