1.去微信官方下载支付相对应的SDK和DEMO:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
2.把解压过后的文件夹放到项目的 public 目录下
3.进入 wxpay/example/jsapi.php 把下面三个文件引入到你要支付的哪个控制器里面 ,
require_once "/wxpay/lib/WxPay.Api.php";
require_once "/wxpay/example/WxPay.JsApiPay.php";
require_once '/wxpay/example/log.php';
4.把 wxpay/example/jsapi.php 以下代码放入支付的方法里
//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
//②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody("支付测试");//商品名称
$input->SetAttach("wechat");//附加参数
$input->SetOut_trade_no(\WxPayConfig::MCHID.date("YmdHis"));//订单号
$input->SetTotal_fee(1);//支付金额/*$fee*/
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
//echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';
//printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
//获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters();
《4.0》支付的方法
public function vip_pay(){
$tools = new \JsApiPay();
$money = input('post.money');
$openId = input('post.openid');
$member = Db::name("cms_member")->where("openid",$openId)->find();
if ($member['vip'] == 2){
// echo 111;
return api_json(400,null,"您已经是会员啦~~");
}
//②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody("11");//商品名称
$input->SetAttach("wechat");//附加参数
$input->SetOut_trade_no(\WxPayConfig::MCHID.date("YmdHis"));//订单号
$input->SetTotal_fee($money*100);//支付金额/*$fee*/
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = \WxPayApi::unifiedOrder($input);
//echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';
//printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
return api_json(200,$jsApiParameters,'ok');
}
5.配置 wxpay/lib/wxpay.config.php
const APPID = ''; //小程序APPid
const MCHID = ''; //商户号
const KEY = ''; // 商户支付密钥
const APPSECRET = ''; //小程序秘钥
6.支付成功或失败的回调
public function vip_status(){
// halt(111);
$member_id = input('post.member_id');
$money = input('post.money');
$pra = "高级会员";
$time = time();
$data=[
'name'=>$member_id,
'money'=>$money,
'content'=>$pra,
'create_time'=>$time
];
$money = Db::name("cms_money")->insert($data);
// 支付成功发送消息
$praName = Db::name("cms_practice")->where("id",$pra)->find();
$msage = [
'title'=>"支付成功",
'content'=>"您购买的".$praName['practice']."支付成功",
'create_time'=>$time,
'member_id'=>$member_id,
'type'=>2
];
Db::name("cms_msg")->insert($msage);
if ($money){
Db::name("cms_member")->where("id",$member_id)->setField('vip',2);
Db::name("cms_member")->where("id",$member_id)->setField('end_time',strtotime("+1 year"));
Db::name("cms_member")->where("id",$member_id)->setField('vip_lv',"高级会员");
return api_json(200,'','支付成功');
}else{
return api_json(400,'','支付失败');
}
}
<微信公众号支付的话把 wxpay/example/jsapi.php 的js代码放到统一下单之后的页面>
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
if(res.err_msg=="get_brand_wcpay_request:ok"){
if(document.getElementById("typr").value==1){
//alert("支付成功!");
window.location.href = 'http://bxd.uiang.cn/home/recharge/paysuccess?free='+<?php echo $num; ?>;
}else{
//alert("支付成功!");
window.location.href = 'http://bxd.uiang.cn/home/recharge/notify11?free='+<?php echo $num; ?>;
}
}else if(res.err_msg=="get_brand_wcpay_request:cancel"){
//alert("未支付!");
window.location.href = 'http://bxd.uiang.cn/home/recharge/top';
}
// window.location.href = "{:url('/Recharge/notify')}";
}
);
}
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>