700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php接入微信JSAPI支付 微信内拉起支付 基于thinkPHP框架 WeChatDeveloper支付类包

php接入微信JSAPI支付 微信内拉起支付 基于thinkPHP框架 WeChatDeveloper支付类包

时间:2019-04-14 21:06:24

相关推荐

php接入微信JSAPI支付 微信内拉起支付 基于thinkPHP框架 WeChatDeveloper支付类包

文章:php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

文章:php快速接入支付宝即时支付,PC网站支付和手机网站支付,基于thinkPHP框架 WeChatDeveloper支付类包

在使用前可以先看上面的微信扫码支付和H5支付的文章,本文主要介绍微信JSAPI支付,在微信内拉起支付;

开发注意事项:

1、在开发前请先确认回调的域名是否加入了JS安全域名,IP白名单,微信公众平台和微信支付平台都要加,并且开通了对应的产品;

2、复制以下代码前必须安装WeChatDeveloper类,下面都是基于这个类写的,如果不安装不用在往下看了;

3、在使用下面的类之前需要先获取到用户的code,下文会具体说明;

4、下面代码部分已经用xxx代码,需要替换成自己业务对应的才可以;

在使用JSAPI支付时,openid为必填项,在对非微信端网站使用该支付时,需要先获取到用户的openid;

网页授权流程分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期【我们不需要】

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)【我们也不需要】

首先我们让用户访问下面这个网址获取到用户的code,APPID换成自己的,回调网址就是我们下面这个wxJsApi方法,STATE是非必填的 填不填都可以;

https://open./connect/oauth2/authorize?appid=【APPID】&redirect_uri=【跳转的网址】&response_type=code&scope=snsapi_base&state=【非必填参数】#wechat_redirect

当用户访问了上面这个网址并且会跳转到下面这个wxJsApi方法中,在参数中就会携带用户的code,这个时候我们的getOauthAccessToken就会自动获取用户的信息,里面就包含了openid;具体内容见下文代码:

/*** 微信JSAPI支付*/public function wxJsApi(){// 准备配置参数$config = ['appid'=> 'wx1238598xxxxxxxxe','appsecret' => '5d6fg5r8g4xxxxxxxxxxxxxx56564hg5','mch_id'=> '160xxxxx24','mch_key' => 'NAMECeShi20xxxxxxxxxxxx21816',];try {// 实例接口$openid = new \WeChat\Oauth($config);// 获取用户的openid$open_id = $openid->getOauthAccessToken();// 创建接口实例$wechat = new \WeChat\Pay($config);// 组装参数,可以参考官方商户文档$options = ['body' => '订单名称','out_trade_no'=> time(), //订单号'total_fee' => 1*100, //金额,单位分'notify_url' => '/tongzhi', //异步通知地址'spbill_create_ip' => $_SERVER["REMOTE_ADDR"],'trade_type' => 'JSAPI','openid' => $open_id['openid']];$result = $wechat->createOrder($options);$jsapi = $wechat->createParamsForJsApi($result['prepay_id']);// 渲染到前端进行拉起$this->assign('jsapi',$jsapi);return $this->fetch();} catch (\WeChat\Exceptions\InvalidResponseException $e) {echo $e->getMessage() . PHP_EOL;}}

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>微信订单支付</title></head><body><script>function onBridgeReady(){WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId":"{$jsapi['appId']}",//公众号名称,由商户传入"timeStamp":"{$jsapi['timeStamp']}", //时间戳,自1970年以来的秒数"nonceStr":"{$jsapi['nonceStr']}", //随机串"package":"{$jsapi['package']}","signType":"{$jsapi['signType']}", //微信签名方式:"paySign":"{$jsapi['paySign']}" //微信签名},function(res){if(res.err_msg == "get_brand_wcpay_request:ok" ){// 使用以上方式判断前端返回,微信团队郑重提示:// res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。location.href="/ok";}});}// 页面加载自动触发window.onload=function(){if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}}</script></body></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。