微信支付:
1、申请开通微信支付(需要微信公众号),这块是同事去申请的,应该不难,对照说明去申请开通。
2、成功开通后,收到审核通过的邮件(配置文件用),内容包括:
微信支付商户号:xxxxxxxx
商户平台登录帐号:xxxxxxxx
商户平台登录密码:xxxxxxxx
申请对应的公众号:xxxxxxxx
公众号APPID:xxxxxxxx
3、开发sdk包下载,服务端用的是PHP,下载地址:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
4、sdk配置文件
解压sdk包后,有以下文档:
/cert
/doc
/example
/lib
/logs
index.php
(1)index.php修改jsapi支付链接地址为商户网站的支付地址,如:
<a href="http://商户网址/example/jsapi.php">JSAPI支付</a>
(2)/lib/WxPay.Config.php 修改配置文件:
const APPID = '邮件中';
const MCHID = '邮件中';
const KEY = '自定义';//自定义密钥,并且登录https://pay.weixin.qq.com/index.php/account/api_cert ,API安全,设置密钥(自定义)。
const APPSECRET = '微信公众号登录(开发者中心AppSecret)';
(3) /example/WxPay.JsApiPay.php存在BUG:
curl_setopt($ch, CURLOP_TIMEOUT, 30);
修改为:
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
5、微信公众号配置
登录微信公众平台-》微信支付-》开发配置-》测试授权目录(修改),填写支付测试目录,一般是二级或三级目录(如:www.商户.com/sdk/example/)
再添加1个测试白名单(即微信账号)
我把类PayNotifyCallBack单独放到文件中了,这样方便框架加载。当然不要忘了里面用到Log类的地方都要加上命名空间。如:
1、申请开通微信支付(需要微信公众号),这块是同事去申请的,应该不难,对照说明去申请开通。
2、成功开通后,收到审核通过的邮件(配置文件用),内容包括:
微信支付商户号:xxxxxxxx
商户平台登录帐号:xxxxxxxx
商户平台登录密码:xxxxxxxx
申请对应的公众号:xxxxxxxx
公众号APPID:xxxxxxxx
3、开发sdk包下载,服务端用的是PHP,下载地址:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
4、sdk配置文件
解压sdk包后,有以下文档:
/cert
/doc
/example
/lib
/logs
index.php
(1)index.php修改jsapi支付链接地址为商户网站的支付地址,如:
<a href="http://商户网址/example/jsapi.php">JSAPI支付</a>
(2)/lib/WxPay.Config.php 修改配置文件:
const APPID = '邮件中';
const MCHID = '邮件中';
const KEY = '自定义';//自定义密钥,并且登录https://pay.weixin.qq.com/index.php/account/api_cert ,API安全,设置密钥(自定义)。
const APPSECRET = '微信公众号登录(开发者中心AppSecret)';
(3) /example/WxPay.JsApiPay.php存在BUG:
curl_setopt($ch, CURLOP_TIMEOUT, 30);
修改为:
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
5、微信公众号配置
登录微信公众平台-》微信支付-》开发配置-》测试授权目录(修改),填写支付测试目录,一般是二级或三级目录(如:www.商户.com/sdk/example/)
再添加1个测试白名单(即微信账号)
再确认下:开发者中心-》网页授权获取用户基本信息 的域名和测试目录是同一域名
【注:微信支付在电脑浏览器不好调试,必需有openid才行,所以可以在请求接口中手动加上openid来测试,这样就可以直接获取微信返回的结果数据了】
如:$openId = 'oTKl-uDPNkkz3yutfY2TJgNy3s4I';//mike
6、上传sdk测试支付。
--------------------------------------------------------------------------------------------------------------------------
微信回调:
回调地址:在支付时设置
$input->SetNotify_url("xxx/third_party/wx/example/notify.php");
框架里可能是这样
$input->SetNotify_url(BASEURL."/verify/notify_wx/");
微信的Log类和我的项目框架中Log类重名了,导致无法加载报错。解决办法:给微信Log类加上命名空间。log.php中第一行加上namespace WXPAY;
notify.php代码类似这样:
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once '../lib/WxPay.Notify.php';
require_once 'log.php';
require_once "AmPayNotifyCallBack.php";
//初始化日志
$logHandler= new \WXPAY\CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = \WXPAY\Log::Init($logHandler, 15);
\WXPAY\Log::DEBUG("begin notify".time());
$notify = new PayNotifyCallBack();
//print_r($_REQUEST);
$notify->Handle(false);
//处理回调数据 参见文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
$returnValues = $notify->GetValues();
//交易成功
if(!empty($returnValues['result_code']) && $returnValues['result_code'] == 'SUCCESS'){
//商户逻辑处理,如订单状态更新为已支付
}
echo $notify->ToXml();//返回给微信确认
我把类PayNotifyCallBack单独放到文件中了,这样方便框架加载。当然不要忘了里面用到Log类的地方都要加上命名空间。如:
use WXPAY\Log;
use WXPAY\CLogFileHandler;