tp3实现微信公众号支付

管理员 发布于 7年前   393

1.首先拿到APPID,MCHID,KEY,APPSECRET,NOTIFY_URL,然后在WxPayConfig填写;

2.授权目录url直接到支付方法;

3.回调写你自己的回调url;

4.把官方demo下载放在verdor目录 我的放在 http://houtizong.iask.in/tp5blog/index/download/

控制器:
//weix支付
public function wxpay()
{
	Vendor('lib.JSSDK');
	Vendor('lib.WxPayJsApiPay');
	Vendor('lib.log');
	Vendor('lib.WxPayApi');
	//实例化JSSDK
	$jssdk=new \JSSDK(C('appid'),C('appSecret'));
	//获取数据
	$signPackage =$jssdk->GetSignPackage();
	//初始化日志
	$logHandler= new \CLogFileHandler("./logs/".date('Y-m-d').'.log');
	$loginfo=\Log::Init($logHandler, 15);
	//①获取用户openid
	$tools=new \JsApiPay();
	$openId = $tools->GetOpenid();
	//②统一下单
	$input=new \WxPayUnifiedOrder();
	$input->SetBody("公益捐款"); //设置商品或支付单简要描述
	$input->SetAttach("附加数据"); //设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
	$input->SetOut_trade_no(\WxPayConfig::MCHID.date("YmdHis")); //设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
	$input->SetTotal_fee("1"); //设置订单总金额,只能为整数,详见支付金额
	$input->SetTime_start(date("YmdHis")); //设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
	$input->SetTime_expire(date("YmdHis",time()+ 600)); //设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则
	$input->SetGoods_tag("商品标记"); //设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
	$input->SetNotify_url("xxx/index/wxcall");//设置接收微信支付异步通知回调地址
	$input->SetTrade_type("JSAPI"); //设置取值如下:JSAPI,NATIVE,APP,详细说明见参数规定
	$input->SetOpenid($openId); //设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 
	$order = \WxPayApi::unifiedOrder($input);
	$jsApiParameters=$tools->GetJsApiParameters($order);
	$this->assign('jsApiParameters',$jsApiParameters);
	$this->assign('signPackage',$signPackage);
	$this->display();
}
//回调
public function wxcall()
{
    // $xml = $GLOBALS['HTTP_RAW_POST_DATA'];  
    // // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了  
    // file_put_contents('./Application/Public/log.txt',$xml,FILE_APPEND);  
    // //将服务器返回的XML数据转化为数组  
    // //$data = json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);  
    // $data = xmlToArray($xml);  
    // // 保存微信服务器返回的签名sign  
    // $data_sign = $data['sign'];  
    // // sign不参与签名算法  
    // unset($data['sign']);  
    // $sign = $this->makeSign($data);  
    // // 判断签名是否正确  判断支付状态  
    // if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') ) {  
    //     $result = $data;  
    //     // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了  
    //     file_put_contents('./Application/Public/log1.txt',$xml,FILE_APPEND);     
    //     //获取服务器返回的数据  
    //     $order_sn = $data['out_trade_no'];  //订单单号  
    //     $order_id = $data['attach'];        //附加参数,选择传递订单ID   
    //     $openid = $data['openid'];          //付款人openID  
    //     $total_fee = $data['total_fee'];    //付款金额     
    //     //更新数据库  
    //     $this->updateDB($order_id,$order_sn,$openid,$total_fee);  
    // }else{  
    //     $result = false;  
    // }  
    // // 返回状态给微信服务器  
    // if ($result) {  
    //     $str='';  
    // }else{  
    //     $str='';  
    // }  
    // echo $str;  
    // return $result;  
}
<!DOCTYPE html>
<html>
<script>
(function (doc, win) {
  var docEl = doc.documentElement,
      resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
      recalc = function () {
          var clientWidth = docEl.clientWidth;
          if (!clientWidth) return;
          if(clientWidth>=640){
              docEl.style.fontSize = '100px';
          }else{
              docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
          }
      };

  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
</script>
<head>
<meta charset="utf-8">
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">

<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript" charset="utf-8"></script>
<title>wxpay</title>
</head>
<body>

	<div class="pay" style="margin:0 auto">
		<p style="font-size: 20px;">商品名称:侯哥支付</p>
		<p style="font-size: 20px;">金额大小:1分钱</p>
		<span id="zhifu" style="margin:0 auto;width:237px;height:72px;border: 1px solid #DECECE;font-size: 20px;padding: 10px;border-radius: 5px;">
			去支付
		</span>
	</div>
</body>
<script>
	onload=function() {
	document.getElementById('zhifu').addEventListener('touchstart',function() {
		  	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 jsApiCall() {
				WeixinJSBridge.invoke(
				    'getBrandWCPayRequest',
				    {$jsApiParameters},
				    function(res){
				      WeixinJSBridge.log(res.err_msg);
				      if(res.err_msg.indexOf('ok')!=-1){
				      	localStorage.clear();
				   		//location.href='{:U('wxpay')}'
				      }
				    }
				);
			}
	  }); 		
	}
</script>
</html>	

效果图:

1.png

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

该博客于2020-12-7日,后端基于go语言的beego框架开发
前端页面使用Bootstrap可视化布局系统自动生成

是我仿的原来我的TP5框架写的博客,比较粗糙,底下是入口
侯体宗的博客

      订阅博客周刊

文章标签

友情链接

HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群
侯体宗的博客