加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

从0开始一步一步用Laravel5.2集成原生微信支付

发布时间:2020-12-14 20:28:46 所属栏目:资源 来源:网络整理
导读:目前微信支付集成到框架里面有太多的坑了,项目中刚好遇到一个,把经验和重要的坑写出来,一步一步从0开始,大家有什么不会的可以留言。 4.在resource/view/下新建文件夹wechat,里面视图就把appWechat里面的jsapi.php改名为jsapi.blade.php放进去,这里要

目前微信支付集成到框架里面有太多的坑了,项目中刚好遇到一个,把经验和重要的坑写出来,一步一步从0开始,大家有什么不会的可以留言。

4.在resource/view/下新建文件夹wechat,里面视图就把appWechat里面的jsapi.php改名为jsapi.blade.php放进去,这里要说一下,引用的文件路径,必须是我这种格式“../app/Wechat”下才能正确读取,而且把所有app/Wechat下的各种文件都打开,里面只要用到路径,你就在require_once后面加个“../app/Wechat/”

GetOpenid("/wechat?money=".$money); //传参要这样传,还要改一下example/WxPay.JsApiPay.php文件

//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody("微信支付");
$input->SetAttach("微信支付");
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee($money);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("");
$input->SetNotify_url("http://aaa.com/wechat/notify");//这里填你的回调路径,是绝对路径,例如http://aaa.com/wechat/notify
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
// echo '统一下单支付单信息
'; // printf_info($order); $jsApiParameters = $tools->GetJsApiParameters($order); //获取共享收货地址js函数参数 $editAddress = $tools->GetEditAddressParameters(); //③、在支持成功回调通知中处理成功之后的事宜,见 notify.php /**  * 注意:  * 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功  * 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”,  * 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html)  */ ?>   微信支付 //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', , function(res){ //这底下的东西就是上面$input->SetNotify_url("http://aaa.com/notify");这个传过来的 WeixinJSBridge.log(res.err_msg); // alert(res.err_code+res.err_desc+res.err_msg); if (res.err_msg == "get_brand_wcpay_request:ok") { //如果微信支付成功 // message: "微信支付成功!" alert("支付成功!"); window.location.href="/wechat/do;//你成功后要跳转的页面或控制器 }else if(res.err_msg == "get_brand_wcpay_request:cancel"){ //如果取消微信支付 alert("您已取消支付"); } } ); } 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', , 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(); } };

充值


该笔订单支付金额为{{$sum}}元钱

立即支付

5.写控制器,新建控制器叫WechatController,主要是回调函数里写好你的逻辑(官方无回调文档,很坑)

withMoney($money);//把money作为参数带到jsapi.blade.php
}

public function notify(){ //这里是你的回调函数,这个很坑,官方都没有文档的
 public function notify(Request $request){
$streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : ''; //拿到微信回调回来的信息判断支付成功没

if(empty($streamData)){
$streamData = file_get_contents('php://input');
}

if($streamData!=''){
$streamData=xmlToArray($streamData); 
$Data=json_encode($streamData);
Log::debug('Alipay notify post data verification fail.', [ //写入服务器文档,你不加这个也行
'data' => $Data.'xxxxxx'
]);
if($streamData['return_code'] == 'SUCCESS' && $streamData['result_code'] == 'SUCCESS'){ //支付成功
try { //开始事务
//支付成功,你要干些什么都写这里,例如增加余额的操作什么的

} catch (Exception $e) {
//如果try里面的东西出现问题的话,进行数据库回滚
throw $e; 
}

}
}else{
$ret = false; //支付失败
}
}
}

6.注册路由(这里最好用any的方法,因为发过去是post,回来的是get)

7.app/Wechat/example/WxPay.JsApiPay.php里面的getopenid方法还要改一下,否则不能传参数

__CreateOauthUrlForCode($baseUrl);
			 Header("Location: $url");
			 exit();
		 } else {
			//获取code码,以获取openid
		$code = $_GET['code'];
			$openid = $this->getOpenidFromMp($code);
 			return $openid;
		}
	}

9.下面就要说说微信公众平台上,一共要改3个地方

(1)在开发者工具下面,修改网页账号(否则通过不了Oauth2.0验证会报redirect_url错误)

(2)验证你的URL,URL就是这个验证文件在项目中的位置,如果放到public文件夹下,你就直接写http://aaa.com/wx_sample.php

验证文件如下:

wx_sample.php

valid();

class wechatCallbackapiTest
{
	public function valid()
{
$echoStr = $_GET["echostr"];

//valid signature , option
if($this->checkSignature()){
	echo $echoStr;
	exit;
}
}

public function responseMsg()
{
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

	//extract post data
		if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
 the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "


%s


0
"; 
				if(!empty( $keyword ))
{
		$msgType = "text";
	$contentStr = "Welcome to wechat world!";
	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
	echo $resultStr;
}else{
	echo "Input something...";
}

}else {
	echo "";
	exit;
}
}
		
	private function checkSignature()
	{
// you must define TOKEN by yourself
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}

$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}

?>

(3)修改开发配置(支付授权目录和测试授权目录),这里要注意,如果你的支付路径是http://aaa.com/index.php/wechat,你就填http://aaa.com/index.php/,反正就是最后那个斜杠后面的别加

哈哈,大功告成~微信支付能用了~大家有不懂的在下面留言,我看到了都会解答的

作者:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读