* 下载微信支付SDK(官方下载路径URL:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
<https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1>)
* 将下载文件进行解压获取文件,文件结构如下图所示
*
* 找到ThinkPHP3.2.3第三方库中路径为:ThinkPHP\Library\Vendor。在此路径下创建文件夹Weixinpay
(名称可以随意),将下载解压后的文件复制新建文件夹中。
* 在模块中创建控制器 WeixinpayController.class.php 用于处理支付,定义方法wxpay()实现支付功能。
* public function wxpay() { vendor('WeixinPay.example.WxPay#JsApiPay');//引入文件
try{ $tools = new JsApiPay(); $openId = $tools->GetOpenid(); //②、统一下单 $input =
new WxPayUnifiedOrder(); $input->SetBody("test"); //商品描述
//$input->SetAttach("test"); //附加数据暂未使用到可以注释掉
$input->SetOut_trade_no("sdkphp".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。订单失效时间是针对订单号而言的,由于在请求支付的时候有一个必传参数prepay_id只有两小时的有效期,所以在重入时间超过2小时的时候需要重新请求下单接口获取新的prepay_id
//$input->SetGoods_tag("test");//订单优惠标记,使用代金券或立减优惠功能时需要的参数,项目暂未使用到,因此注释掉
$input->SetNotify_url("http://paysdk.weixin.qq.com/notify.php");//异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。
$input->SetTrade_type("JSAPI");//交易类型JSAPI 公众号支付;NATIVE 扫码支付;APP APP支付;
$input->SetOpenid($openId); $config = new WxPayConfig(); $order =
WxPayApi::unifiedOrder($config, $input); echo '<font
color="#f00"><b>统一下单支付单信息</b></font><br/>'; $this->printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order); //获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters(); //将数据渲染到模板中或前端页面中
$assign=array( 'data'=>$jsApiParameters ); $this->assign($assign);
$this->display(); } catch(Exception $e) {
Log::ERROR(json_encode($e));//此处因为没有使用微信日志方法,所以暂未引入日志类 } }
* 使用微信数据输出样式进行展示得到的数据:如下
* public function printf_info($data) { foreach($data as $key=>$value){ echo
"<font color='#00ff55;'>$key</font> : ".htmlspecialchars($value, ENT_QUOTES)."
<br/>"; } }
 

*
 此时访问wxpay()方法时会出现一堆报错,报错内容大概是一些xxx类不存在或者xxx方法
不存在等信息,因为直接使用Vendor引入下载的SDK文件,入口文件是index.php,因此‘..’路径不对,所以需要修改SDK文件引入路径。如下:

*
example/WxPay.JsApiPay.php文件修改如下:

         

         example/WxPay.Config.php文件修改如下:

        

* 只需将类似这样的路径进行修改如上所示即可
* 配置微信支付所需要的参数,在example/WxPay.Config.php进行配置信息,配置数据获取方式网上搜索一堆,此处不再介绍
  



* html页面渲染如下:此页面是官方提供的代码样式,此处代码写在和控制器WeixinpayController.class.php
一个模块中。使用的是ThinkPHP本身前后端编写方式。 <html> <head> <meta http-equiv="content-type"
content="text/html;charset=utf-8"/> <meta name="viewport"
content="width=device-width, initial-scale=1"/> <title>微信支付样例-支付</title>
<script type="text/javascript"> //调用微信JS api 支付 function jsApiCall() { var
data={$data}; WeixinJSBridge.invoke( 'getBrandWCPayRequest', data,
function(res){ WeixinJSBridge.log(res.err_msg);
alert(res.err_code+res.err_desc+res.err_msg); } ); } 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();
} } </script> <script type="text/javascript"> //获取共享地址 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> </head> <body> <br/> <font
color="#9ACD32"><b>该笔订单支付金额为<span
style="color:#f00;font-size:50px">1分</span>钱</b></font><br/><br/> <div
align="center"> <button style="width:210px; height:50px; border-radius:
15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer;
color:white; font-size:16px;" type="button" onclick="callpay();" >立即支付</button>
</div> </body> </html>
* 此时可以进行测试支付操作,可以进行正常唤起支付弹窗进行支付。
* 支付成功之后进行回调处理
* 在控制器WeixinpayController.class.php中定义notify()方法用于调用回调:如下
*
* 在example/notify.php文件中进行处理回调逻辑代码:如下
* 、
* 微信支付到此结束