PHP+tp3实现微信支付

PHP+tp3实现微信支付,实测亲用
1.下载微信支付的sdk,然后在WxPay.Config.php中更改自己的信息

/**
	 * TODO: 修改这里配置为您自己申请的商户信息
	 * 微信公众号信息配置
	 * 
	 * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
	 * 
	 * MCHID:商户号(必须配置,开户邮件中可查看)
	 * 
	 */
	public function GetAppId()
	{
		return '';
	}
	public function GetMerchantId()
	{
		return '';
	}
/*
	 * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置), 请妥善保管, 避免密钥泄露
	 * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
	 * 
	 * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置), 请妥善保管, 避免密钥泄露
	 * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
	 * @var string
	 */
	public function GetKey()
	{
		return '';
	}
	public function GetAppSecret()
	{
		return '';
	}

2.控制器下单部分代码

//
$logHandler= new CLogFileHandler("./ThinkPHP/Extend/Vendor/wxsjpay/logs/".date('Y-m-d').'.log');
$log = Logssss::Init($logHandler, 15);
$config = new WxPayConfig();
$trade_no = $config->GetMerchantId().'1'.date("YmdHis");	
//①、获取用户openid
try{
	$tools = new \JsApiPay();
	$openId = $tools->GetOpenid($_POST['pay_money']);
	// 这里下单金额 由获取用户openid的时候传入
	$money= $_GET['jiage'];
	// //②、统一下单
	$input = new WxPayUnifiedOrder();
	$input->SetBody("测试");
	$input->SetAttach("测试");
	$input->SetOut_trade_no($trade_no);
    $input->SetTotal_fee($money*100);//金额的单位为分,				
	$input->SetTime_start(date("YmdHis"));
	$input->SetTime_expire(date("YmdHis", time() + 600));
	$input->SetGoods_tag("VIP");
	$input->SetNotify_url("");//微信回调地址,需要在微信公众平台配置
	$input->SetTrade_type("JSAPI");
	$input->SetOpenid($openId);

	$order = WxPayApi::unifiedOrder($config, $input);
	// $this->printf_info($order);         
	$jsApiParameters = $tools->GetJsApiParameters($order);
	//获取共享收货地址js函数参数
	$editAddress = $tools->GetEditAddressParameters();
	
	} catch(Exception $e) {
		Logssss::ERROR(json_encode($e));
	}
      	if($order['err_code'])
		{
			$error=$order['err_code_des'];
			echo "<script> alert('$error');location.href='/';</script>";die;
		}
	   //传入页面参数
		$this->assign('jsApiParameters',$jsApiParameters);
		$this->assign('editAddress',$editAddress);
		$this->assign('data',$data);
		$this->display();

3.html部分代码
选中内容后调用js方法支付

<a class="weui_btn weui_btn_primary" onclick="callpay();" >立即支付</a>

js部分

<script type="text/javascript">
	callpay();
	//调用微信JS api 支付
	function jsApiCall()
	{
		WeixinJSBridge.invoke(
			'getBrandWCPayRequest',
			<?php echo $jsApiParameters; ?>,
			function(res){
				WeixinJSBridge.log(res.err_msg);
				// alert(res.err_msg);
				if(res.err_msg=='get_brand_wcpay_request:ok'){
					//支付成功,跳转支付成功页面
					window.location.href="/pay_success";
				}else{
					alert('支付失败,请刷新重新支付!');
					window.location.href="/pay";
				}
			}
		);
	}

	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();
		}
	}
	//获取共享地址
	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;
				
				// alert(value1 + value2 + value3 + value4 + ":" + tel);
			}
		);
	}
	
	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>

4.业务逻辑可在回调地址中做操作

if($data['return_code'] == "SUCCESS"){

//最后返回给微信
echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 PHP TP5 框架中实现微信支付功能,你需要完成以下几个步骤: 1. 注册微信商户平台账号,并在商户平台中创建应用,获取到商户ID和商户密钥。 2. 安装并配置 PHP SDK,可以使用官方提供的 SDK 或者选择第三方 SDK。 3. 编写支付接口,接收前端传来的订单信息,将订单信息传递给微信支付接口,生成预支付订单,并返回预支付订单信息给前端。 4. 前端根据预支付订单信息调起微信支付页面,用户完成支付后,微信将会回调你的支付回调接口。 5. 在支付回调接口中,验证微信回调的签名,防止恶意攻击,确认订单支付状态,更新订单状态等操作。 下面是一个简单的示例代码,仅供参考: ```php // 引入微信支付 SDK use EasyWeChat\Factory; // 创建支付对象 $config = [ 'app_id' => 'your-app-id', 'mch_id' => 'your-mch-id', 'key' => 'your-key', 'cert_path' => 'path/to/your/cert.pem', 'key_path' => 'path/to/your/key.pem', ]; $payment = Factory::payment($config); // 发起支付请求 $result = $payment->order->unify([ 'body' => 'test', 'out_trade_no' => 'your-order-id', 'total_fee' => 100, 'spbill_create_ip' => '127.0.0.1', 'notify_url' => 'your-notify-url', 'trade_type' => 'JSAPI', 'openid' => 'your-user-openid' ]); // 将预支付订单信息返回给前端 return $result; // 支付回调接口 $payment->notify(function ($notify, $successful) { // 验证签名 if (!$successful) { return 'fail'; } // 更新订单状态等操作 return 'success'; }); ``` 注意,以上代码仅为示例代码,具体实现需要根据你的业务需求进行调整。同时,为了确保支付安全,请务必仔细阅读微信支付开发文档,并遵循开发规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值