php微信公众号支付源码

微信公众号支付

微信公众号支付以TP3.2为例

首先,生成订单后跳到支付的页面,跳转地址代码为:
redirect(‘Payment/prepay’, array(‘order_num’ =>$data[‘order_num’]));

php代码

class PaymentController extends HomeController {
public function prepay() {

 	header("Content-type: text/html; charset=utf-8");
 	// 获取公众号配置信息,包括APPID、APPSECRET、商户号MACHID、API密钥
 	$siteConfig = C('WXCHAT');
    define('APPID', $siteConfig['WECHAT_APPID']);         // APPID 
    define('MACHID', $siteConfig['WECHAT_MACH']);         // 商户号一般起名叫 MACHID
    define('APPSECRET', $siteConfig['WECHAT_APPSECRET']); // APPSECRET
    define('API', $siteConfig['WECHAT_API']);			  // API密钥
 	
    $order_id = I('order_num');  // 订单号
    $this->assign('order_id',$order_id);
   
    if(is_numeric($order_id) && $order_id !== ''){
     	// 订单信息
    	$orderInfo = M('Log')
    	           ->where(array('l_num'=>$order_id))
    	           ->find();
    	$this->assign('order_id',$order_id);
    	$this->assign('info',$orderInfo);
    }
    
    // 加载三方文件(微信支付sdk,放置于  ‘’ 项目名\ThinkPHP\Library\Vendor\WxpayAPI ‘’)
    Vendor('WxpayAPI.WxPayJsApiPay');
    Vendor('WxpayAPI.lib.WxPayApi');
    Vendor('WxpayAPI.log');
    
    ini_set('date.timezone','Asia/Shanghai');
    
    //----------进行初始化日志操作--------------
    
	// 获取用户openid  
    $tools = new \JsApiPay();
    $openId = $tools->GetOpenid();
    
    // 订单号
    $out_trade_no = $order_id;
    
    // 统一下单
    $input = new \WxPayUnifiedOrder();
    $input->SetBody($orderInfo['l_title']);                            //商品描述
    $input->SetOut_trade_no($out_trade_no);
    $input->SetTotal_fee($orderInfo['l_money'] * 100);    // 金额  默认为分
    $input->SetTime_start(date("YmdHis"));                //支付发起时间  
    $input->SetTime_expire(date("YmdHis", time() + 600)); //支付超时  
   
    // 设置支付回调验证地址
    $input->SetNotify_url('http://'.$_SERVER['HTTP_HOST'].'/Payment/notify');
    $input->SetTrade_type("JSAPI");   //  支付类型
    $input->SetOpenid($openId);       // 用户OPENID
    $order = \WxPayApi::unifiedOrder($input);
    $jsApiParameters = $tools->GetJsApiParameters($order);
    $this->assign('jsApiParameters',$jsApiParameters);
    
    $this->display();
    
}

}

prepay.html代码
在这里插入图片描述

点击提交订单 触发 callpay();

js代码

function callpay()
{   
	var version = 5.0;
	if (!checkWXVersion(version)) {
        layer.open({content: '当前版本小于5.0,不支持微信支付。请升级微信版本!',skin: 'msg',time: 2});
	} else {
		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();
		}
	}
	
}


//调用微信JS api 支付
function jsApiCall()
{
	WeixinJSBridge.invoke(
		'getBrandWCPayRequest',
		{$jsApiParameters},
		function(res){
			WeixinJSBridge.log(res.err_msg);
			if(res.err_msg == 'get_brand_wcpay_request:cancel') {
                    alert("您已取消了此次支付");
                    return;
                } else if(res.err_msg == 'get_brand_wcpay_request:fail') {
                    alert("支付失败");
                    return;
                } else if(res.err_msg == 'get_brand_wcpay_request:ok') {
                	var order_id = "{$order_id}";
                	var url = "__URL__/notify"; // 在回调地址里写支付成功或失败的逻辑
                	$.post(url,{'order_id':order_id},function(result){
                		  if(result.success){
                		  	   location.href="{:U('PortalUser/index')}";
                		  }
                	},'json')
                } else {
                    alert("未知错误"+res.error_msg);
                    return;
                }
		}
	);
}

// 判断微信版本是否支持微信支付
function checkWXVersion(miniversion)
{
	var pattern = /MicroMessenger[\s\/]+([\d.]+)/ig;
	var ua = navigator.userAgent;
	var match = pattern.exec(ua) || [];
	var v = match[1] || 0;
	return parseFloat(v) >= miniversion ? true : false;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值