> #### 需要吧下面的源码复制到extend/weixin/wxpay目录下,或者自己修改命名空间。 ~~~ $wxconfig=[ 'APPID'=>'', 'MCHID'=>'', 'KEY'=>'', 'APPSECRET'=>'', 'SSLCERT_PATH'=>'', 'SSLKEY_PATH'=>'' ]; ~~~ 参数说明 appid和APPSECRET2个参数的作用:获取微信用户必备的2个参数 MCHID和KEY一起配合appid和APPSECRET才能完成整个支付 SSLCERT_PATH和SSLKEY_PATH # JSPAY支付demo 1. 获取用户的openid ~~~ $Oauth=new \weixin\wxpay\Oauth($wxconfig); if(Cookie::has('openid')){ $openid=Cookie::get('openid'); }else{ $userinfo= $Oauth->getWxuser(); $openid=$userinfo['openid']; Cookie::set('openid',$openid,3600); } ~~~ 2. 统一下单 ~~~ $values['openid']=$openid; $values['attach']='支付测试'; $values['body']='JSAPI支付测试'; $values['notify_url']='http://www.kkk.cn/'; $values['spbill_create_ip']=$_SERVER['REMOTE_ADDR']; $values['time_start']=date("YmdHis"); $values['time_expire']=date("YmdHis", time() + 600); $values['out_trade_no']=time(); $values['total_fee']=1; $values['trade_type']='JSAPI'; $o=new \weixin\wxpay\Order($wxconfig); $order=$o->setrequests($values)->unifiedorder(); ~~~ 3. 根据统一下单的订单号 获取获取JsApi$getParameters参数,展示到前台模板 ~~~ $jspay=new \weixin\wxpay\Jspay($wxconfig); $jsApiParameters = $jspay->GetJsApiParameters($order); return $this->fetch('index',['jsApiParameters'=>$jsApiParameters]); ~~~ 4. 前台页面进行点击支付,或者自动弹出支付,需要自己定义 ~~~ <center><h1 onclick='callpay()'>点击支付</h1></center> <script type="text/javascript"> 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(); } } //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest',{$jsApiParameters}, function(res){ WeixinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); } ); } </script> ~~~ 5. 支付回调 ~~~ $raw_xml = file_get_contents('php://input'); libxml_disable_entity_loader(true); //libxml_disable_entity_loader()作用是设置是否禁止从外部加载XML实体,设为true就是禁止,目的是防止XML注入攻击(详情自行百度) $ret = json_decode(json_encode(simplexml_load_string($raw_xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); //支付成功之后处理 if($ret['return_code'] == "SUCCESS"){ //自己系统业务逻辑 //给微信支付返回成功操作 echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; } ~~~ # 退款 ~~~ //退款申请接口中,out_trade_no、transaction_id至少填一个! $values['out_trade_no']=''; //商户退款单号 $values['out_refund_no']=; //订单金额 $values['total_fee']= //退款金额 $values['refund_fee']= //退款账户 $values['op_user_id']=$wxconfig['MCHID']; $o=new \weixin\wxpay\Order($wxconfig); $refund=$o->setrequests($values)->refund(); ~~~