欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微信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);
     

相关标签: ios php