tp5实现微信支付

首先将订单信息(或者金额)进行传值

window.location.href = '/wxpay/pay_wechat.php?order_id=' + data

然后在public/wxpay/pay_wechant.php中实现:

<?php 
ini_set('date.timezone','Asia/Shanghai');
header("Content-type:text/html; charset=utf-8;");

require_once "./lib/WxPay.Api.php";
require_once "WxPay.JsApiPay.php";
require_once 'log.php';

//初始化日志
$logHandler= new CLogFileHandler("./logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);

//打印输出数组信息
function printf_info($data)
{
    foreach($data as $key=>$value){
        echo "<font color='#00ff55;'>$key</font> : $value <br/>";
    }
}

$order_id = $_GET['order_id'];
$merchant_id = $_GET['merchant_id'];
//获取用户订单的金额数
$dsn = 'mysql:dbname=hzsj;host=127.0.0.1';
$user = ;
$password = 'xxx';
$pdo = new PDO($dsn, $user, $password);
$pdo->exec("set names utf8");
$sql = "SELECT * FROM `order` WHERE order_id='$order_id'";
$order_data = $pdo->query($sql)->fetch();

$total_money = $order_data['goods_total'] * 100;
//获取订单号
$out_trade_no = $order_data['order_sn'];

//获取商品信息
$goods_id = $order_data['goods_id'];
$goods_sql = "SELECT `activity_name` FROM `activity` WHERE activity_id='$goods_id'";
$goods_data = $pdo->query($goods_sql)->fetch();

//获取网站的基本信息
$web_sql = "SELECT `web_name` FROM `setting` where id=1";
$web_setting = $pdo->query($web_sql)->fetch();

//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody($web_setting['web_name']."-".$goods_data['activity_name']);
$input->SetAttach($web_setting['web_name']."-".$goods_data['activity_name']);
$input->SetOut_trade_no($out_trade_no);
$input->SetTotal_fee($total_money);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag($web_setting['web_name']."-".$goods_data['activity_name']);
$input->SetNotify_url("xxx/wxpay/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
//
echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';
$jsApiParameters = $tools->GetJsApiParameters($order);

//获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters();

?>

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/> 
    <title>微信支付</title>
    <script type="text/javascript">
	//调用微信JS api 支付
	function jsApiCall()
	{
		WeixinJSBridge.invoke(
			'getBrandWCPayRequest',
			<?php echo $jsApiParameters; ?>,
			function(res){
				WeixinJSBridge.log(res.err_msg);

                if(res.err_msg == 'get_brand_wcpay_request:cancel'){
                    alert('您已取消本次支付');
                    window.location.href="xxx/wap/goods/goods_detail?goods_id=<?php echo $goods_id?>";
                }else if(res.err_msg == 'get_brand_wcpay_request:ok'){
                    window.location.href="xxx/wap/order/my_order";
                }
			}
		);
	}

	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();
		}
	}
	</script>
	<script type="text/javascript">
	//获取共享地址
	function editAddress()
	{
		WeixinJSBridge.invoke(
			'editAddress',
			<?php echo $editAddress; ?>,
			function(res){
				var value1 = res.proviceFirstStageName;
				var value2 = res.addressCitySecondStageName;
				var value3 = res.addressCountiesThirdStageName;
				var value4 = res.addressDetailInfo;
				var tel = res.telNumber;
			}
		);
	}
	
	window.onload = function(){
		if (typeof WeixinJSBridge == "undefined"){
		    if( document.addEventListener ){
		        document.addEventListener('WeixinJSBridgeReady', editAddress, false);
		    }else if (document.attachEvent){
		        document.attachEvent('WeixinJSBridgeReady', editAddress); 
		        document.attachEvent('onWeixinJSBridgeReady', editAddress);
		    }
		}else{
			editAddress();
		}
	};
	
	</script>
</head>
<body style="display: none">
    <br/>
    <font color="#9ACD32"><b>该笔订单支付金额为<span style="color:#f00;font-size:50px"><?php echo $order_data['goods_total'];?>元</span>钱</b></font><br/><br/>
	<div align="center">
		<button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;" type="button" onclick="callpay()" >立即支付</button>
	</div>
</body>
</html>
<script src="../static/Wap/js/jQuery v1.12.4.js"></script>
<script>
    $(document).ready(function () {
        callpay()
    });
</script>

然后在返回的public/wxpay/notify.php中实现数据库修改的相关信息 本人这是这么写的:

<?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';

//初始化日志
$logHandler = new CLogFileHandler("./logs/" . date('Y-m-d') . '.log');
$log = Log::Init($logHandler, 15);

class PayNotifyCallBack extends WxPayNotify
{
    //查询订单
    public function Queryorder($transaction_id)
    {
        $input = new WxPayOrderQuery();
        $input->SetTransaction_id($transaction_id);
        $result = WxPayApi::orderQuery($input);
        Log::DEBUG("query:" . json_encode($result));
        if (array_key_exists("return_code", $result)
            && array_key_exists("result_code", $result)
            && $result["return_code"] == "SUCCESS"
            && $result["result_code"] == "SUCCESS") {
            return true;
        }
        return false;
    }

    //重写回调处理函数
    public function NotifyProcess($data, &$msg)
    {
        Log::DEBUG("call back:" . json_encode($data));
        $notfiyOutput = array();

        if (!array_key_exists("transaction_id", $data)) {
            $msg = "输入参数不正确";
            return false;
        }
        //查询订单,判断订单真实性
        if (!$this->Queryorder($data["transaction_id"])) {
            $msg = "订单查询失败";
            return false;
        }
        if ($data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS') {
            $out_trade_no = $data['out_trade_no'];
            $dsn = 'mysql:dbname=xxx;host=xxx';
            $user = 'xxx';
            $password = 'xxxx';
            $pdo = new PDO($dsn, $user, $password);
            $pdo->exec("set names utf8");
            $order_sql = "SELECT * FROM `order` WHERE order_sn='$out_trade_no'";
            $order_data = $pdo->query($order_sql)->fetch();
            $goods_sql = 'SELECT * FROM activity WHERE activity_id = ' . $order_data['goods_id'];
            $goods_data = $pdo->query($goods_sql)->fetch();
            $setting_sql = 'SELECT * FROM setting WHERE merchant_id = ' . $goods_data['merchant_id'];
            $setting_data = $pdo->query($setting_sql)->fetch();
            if ($order_data['pay_status'] == 0) {
                $now_time = time();
                $order_update_sql = "UPDATE `order` SET pay_status=1,pay_time='$now_time' WHERE order_sn='$out_trade_no'";
                $pdo->exec($order_update_sql);
        }
        return true;
    }


}

Log::DEBUG("begin notify");
$notify = new PayNotifyCallBack();
$notify->Handle(false);

 

基于ThinkPHP 5.1框架打造的多商户电商平台,是目前完善度领先的电商管理平台标准化产品,全新的产品模式很好地诠释电子商务在现今及未来的发展模式,强大的插件可插拔扩展制,让您在的行业电商所向披靡,系统拥有PC、手机WAP、微商城、买家APP、卖家APP、微信小程序,六端合一,六端互通,真正实现全网营销,极其适合企业及个人快速上线商务平台。 系统代码清晰易懂,大量的可视化报表便于运营者决策,丰富的营销功能让系统的应用场景广阔,良好的插件机制使系统更加易于扩展。系统操作简单,安全稳定,更新迭代快速,是广大用户直接使用和二次开发的最佳选择。 电商系统功能 (一) 系统管理:菜单权限、前台菜单、角色管理、职员管理、登录日志、操作日志、图片空间、商城消息、风格设置、计划任务 (二) 基础设置:商城配置、导航管理、广告管理、广告位置、银行管理、支付管理、地区管理、友情链接、快递管理、消息模板 (三) 会员管理:会员等级、会员管理、账号管理 (四) 文章管理:文章管理、文章分类 (五) 运营管理:推荐管理、商品推荐、店铺推荐、品牌推荐、财务管理、资金管理、提现申请、结算管理、商家结算、充值送、退款原路返回 (六) 订单管理:订单管理、投诉管理、退款管理 (七) 店铺管理:店铺认证、开店申请、店铺管理、停用店铺 (八) 商品管理:商品管理、已上架商品、待审核商品、违规商品、商品分类、商品属性、品牌管理、商品规格、评价管理 (九) 虚拟物品自动发货:虚拟商品上架、卡密管理、自动发货 (十) 扩展管理:插件管理、钩子管理 (十一) 分销管理:分销管理菜单、分销商家列表、分销商品列表、佣金分成列表、推广用户列表 (十二) 数据分析:商品销售排行、店铺销售统计、销售额统计、销售订单统计、新增会员统计、会员登录统计 (十三) 营销管理:三级分销,商品团购,限时拍卖、微砍价、优惠券、满减、满送、满包邮、签到送积分、积分商城,拼团 (十四) 微信管理:公众号设置、自定义菜单、用户管理、主动回复文本信息、主动回复图文信息、微信消息模板 (十五) 支付管理:支付宝支付,微信支付、银联支付、货到付款、积分支付、余额支付 (十六) 短信接口:中国网建、阿里大于、阿里云-云通信、短信宝 (十七) 登录接口:QQ登录、微信登录、微博登录、支付宝登录 (十八) 物流接口:快递100接口 (十九) 其他接口:LBS、UCenter通信接口(可与社区论坛等同步登录退出)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值