ThinkPHP3.2.3集成⽀付版本php_sdk_v3.0.9
1. 下载⽀付SDK(官⽅下载路径URL:)
2. 将下载⽂件进⾏解压获取⽂件,⽂件结构如下图所⽰
3.
4. 到ThinkPHP3.2.3第三⽅库中路径为:ThinkPHP\Library\Vendor。在此路径下创建⽂件夹Weixinpay(名称可以随意),将下
载解压后的⽂件复制新建⽂件夹中。
5. 在模块中创建控制器 WeixinpayController.class.php ⽤于处理⽀付,定义⽅法wxpay()实现⽀付功能。
. public function wxpay()
{
vendor('ample.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秒表⽰为20091227 //$input->SetGoods_tag("test");//订单优惠标记,使⽤代⾦券或⽴减优惠功能时需要的参数,项⽬暂未使⽤到,因此注释掉
$input->SetNotify_url("paysdk.weixin.qq/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));//此处因为没有使⽤⽇志⽅法,所以暂未引⼊⽇志类
}
}
7. 使⽤数据输出样式进⾏展⽰得到的数据:如下
. public function printf_info($data)
{
foreach($data as $key=>$value){
echo "<font color='#00ff55;'>$key</font> : ".htmlspecialchars($value, ENT_QUOTES)." <br/>";
}
}
9. 此时访问wxpay()⽅法时会出现⼀堆报错,报错内容⼤概是⼀些xxx类不存在或者xxx⽅法不存在等信息,因为直接使⽤Vendor引⼊
下载的SDK⽂件,⼊⼝⽂件是index.php,因此‘..’路径不对,所以需要修改SDK⽂件引⼊路径。如下:
0. example/WxPay.JsApiPay.php⽂件修改如下:
example/WxPay.Config.php⽂件修改如下:
只需将类似这样的路径进⾏修改如上所⽰即可
1. 配置⽀付所需要的参数,在example/WxPay.Config.php进⾏配置信息,配置数据获取⽅式⽹上搜索⼀堆,此处不再介绍
html页⾯渲染如下:此页⾯是官⽅提供的代码样式,此处代码写在和控制器WeixinpayController.class.php⼀个模块中。使⽤的是ThinkPHP本⾝前后端编写⽅式。
<html>
<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._msg);
___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);
}sdk
}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 = lNumber;
alert(value1 + value2 + value3 + value4 + ":" + tel);
}
);
}
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 >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 </div>
</body>
</html>
此时可以进⾏测试⽀付操作,可以进⾏正常唤起⽀付弹窗进⾏⽀付。
1. ⽀付成功之后进⾏回调处理
2. 在控制器WeixinpayController.class.php中定义notify()⽅法⽤于调⽤回调:如下
3.
4. 在example/notify.php⽂件中进⾏处理回调逻辑代码:如下
5. 、
6. ⽀付到此结束
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论