前期准备:
商户登陆后:安装证书,设置API密钥
下载密钥,准备好各种APPID,KEY,替换到WxPay.Config.php
公众平台:微信支付-
测试授权目录:http://www.aabb.com/mobile/payjsapitest/example/
少了example好像还不行!
第一个问题:
redirect_url参数错误。因为我选择的的“JS API”支付,这种支付需要网页授权,先获取code,再拿code去获取openid和prepay_id。这个网页授权需要登录微信公众平台,点击左侧菜单“开发者中心”,在右侧“权限列表”中找到“网页账号”,点击最右侧的修改,把测试的网址写进去,注意不要加http。填好后,这个坑就趟过去了。
路径:登陆公众号-开发-接口权限:
网页账号 | 无上限 | 已获得 | 修改 |
授权回调页面域名:填写自己网站就OK。
第二个问题:
返回错误码60
这个错误通过修改文件WxPay.Api.php 解决,具体如下:
第537行
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
to
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验2
本来测试的是JSAPI的,后来用户需求还是扫码支付,OK:
$zProid = $_POST['zProid'];
$zbody = $_POST['zbody'] ;// "服务费";
$zattach = "服务费,carno:".$zProid;
$zfee_init = $_POST['zfee'];
$zfee = (float)$zfee_init * 100;
$ztotal = $_POST['ztotal'];
$ztag = "服务费,carno:".$zProid;
$ztime = time();
//$zday = date("y-m-d",$ztime);//2015-12-24
$zday = date("ymdhis",$ztime);
$ztrade_no = 'sp'.$zday . 'no'.$zProid;
$input = new WxPayUnifiedOrder();
$input->SetBody($zbody);
$input->SetAttach($zattach);
$input->SetOut_trade_no($ztrade_no); //WxPayConfig::MCHID.date("YmdHis")
//$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); //
$input->SetTotal_fee($zfee); //支付金额
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag($ztag);
$input->SetNotify_url("http://xxxx/notify.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id($zProid);
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];
还有日志问题的,下次有空再优化吧:
$arr = $GOLBALS['HTTP_RAW_POST_DATA'];
$res = simplexml_Load_string($arr,'SimpleXMLElement',LIBXML_NOCDATA);
$out_trade_no = $res->out_trade_no;
DROP TABLE IF EXISTS `zwxpaylog`;
CREATE TABLE `zwxpaylog` (
`zid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`zbody` varchar(30) NOT NULL DEFAULT '上品车到-服务费',
`zattach` varchar(30) NOT NULL DEFAULT '上品车到-服务费',
`ztag` varchar(30) NOT NULL DEFAULT '上品车到-服务费',
`zproid` mediumint(8) unsigned ,
`shop_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
`zfee` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
`ztradeno`varchar(32) NOT NULL DEFAULT '',
`zadd_time` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`zid`),
KEY `ztradeno` (`ztradeno`)
) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;
insert into `zwxpaylog`(zbody,zattach,ztag,zproid,shop_price,zfee,ztradeno,zadd_time) values('服务费1','服务费2','服务费3',26,23,1800,'126658240120151223164250',unix_timestamp())