1:下载微信支付SDK(官方下载路径URL:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1)
2:找到ThinkPHP3.2.3第三方库中路径为:ThinkPHP\Library\Vendor。在此路径下创建文件夹WxJsapiPay(名称可以随意),将下载解压后的文件复制新建文件夹中。
3:在模块中创建控制器 WeixinpayController.class.php 用于处理支付,定义方法wxpay()实现支付功能
/*
* 去支付
* @return int
* @throws \WxPayException
*/
public function wxpay(){
$openid = "用户的openid";
$money = 1;// 订单总金额,单位为分,详见支付金额
$orderNum = time();
Vendor('WxJsapiPay.lib.WxPay#Api');
Vendor('WxJsapiPay.example.WxPay#Config');
Vendor('WxJsapiPay.example.WxPay#JsApiPay');
//②、统一下单
$tools = new \JsApiPay();
$input = new \WxPayUnifiedOrder();
$input->SetBody("微信充值"); //这里是支付内容
$input->SetAttach('test'); //此处可传值,待支付成功后可取这部分的值
$input->SetOut_trade_no($orderNum); //订单编号
// $input->SetTotal_fee($money); //金额
$input->SetTotal_fee(1); //金额
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://ceshi.net/Retailapi/Weixinpay/notify");//回调地址
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openid);
$config = new \WxPayConfig();
$order = \WxPayApi::unifiedOrder($config, $input);
$jsApiParameters = $tools->GetJsApiParameters($order);
echo $jsApiParameters;
}
/*
*回调地址
*/
public function notify(){
//获取返回的xml
$testxml = file_get_contents("php://input");
//将xml转化为json格式
$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
//转成数组
$result = json_decode($jsonxml,true);
//file_put_contents('test.txt',$jsonxml); --这里是调试方法根目录中test.txt中可查看数据情况
if($result){
//如果成功返回了
if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
file_put_contents('test.txt',$result);
$orderSn = $result['out_trade_no'];
$transactionId = $result['transaction_id'];
$orderIni['order_num'] = $orderSn;
$res = M('account_order')->where($orderIni)->find();
if($res['status'] == 1){
$orderData['transaction_id'] = $transactionId;
$orderData['status'] = 2;
$orderData['end_time'] = time();
M('account_order')->where($orderIni)->save($orderData);
}
echo exit('<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>');
}
}
}
4:此时访问wxpay()方法时会出现一堆报错,报错内容大概是一些xxx类不存在或者xxx方法不存在等信息,因为直接使用Vendor引入下载的SDK文件,入口文件是index.php,因此‘..’路径不对,所以需要修改SDK文件引入路径。如下:
5: example/WxPay.JsApiPay.php文件修改如下:

example/WxPay.Config.php文件修改如下:

6:配置微信支付所需要的参数,在example/WxPay.Config.php进行配置信息


7: html页面渲染如下:此页面是官方提供的代码样式,此处代码写在和控制器WeixinpayController.class.php一个模块中。使用的是ThinkPHP本身前后端编写方式。
<script>
//支付功能
$('.pay_wechat').click(function () {
$.ajax({
url: "{:U('Weixinpay/wxpay')}", //请求的url地址
dataType: "json", //返回格式为json
async: true, //请求是否异步,默认为异步,这也是ajax重要特性
data: {
"txt_uid":"{$txt_uid}",
"txt_retailId":"{$txt_retailId}",
"txt_num":1
}, //参数值
type: "POST", //请求方式
success: function (req) {
console.log(req);
if(req.code == 1){
alert(req.info);
}else{
function jsApiCall() {
var data = req;
// console.log(data);
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
data,
function (res) {
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
if (res.err_msg == "get_brand_wcpay_request:ok") {
window.location.reload();
}
}
);
};
function callpay() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
} else {
jsApiCall();
}
};
callpay();
}
},
error: function () {
alert('请求错误');
}
});
})
</script>
此时可以进行测试支付操作,可以进行正常唤起支付弹窗进行支付
8:在控制器WeixinpayController.class.php中定义notify()方法用于调用回调:如下
/*
*回调地址
*/
public function notify(){
//获取返回的xml
$testxml = file_get_contents("php://input");
//将xml转化为json格式
$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
//转成数组
$result = json_decode($jsonxml,true);
//file_put_contents('test.txt',$jsonxml); --这里是调试方法根目录中test.txt中可查看数据情况
if($result){
//如果成功返回了
if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
file_put_contents('test.txt',$result);
$orderSn = $result['out_trade_no'];
$transactionId = $result['transaction_id'];
$orderIni['order_num'] = $orderSn;
$res = M('account_order')->where($orderIni)->find();
if($res['status'] == 1){
$orderData['transaction_id'] = $transactionId;
$orderData['status'] = 2;
$orderData['end_time'] = time();
M('account_order')->where($orderIni)->save($orderData);
}
echo exit('<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>');
}
}
}
9:微信支付到此结束
912

被折叠的 条评论
为什么被折叠?



