在douphp中加入微信支付教程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在douphp中加入微信支付教程相关的知识,希望对你有一定的参考价值。
本教程结合推送模板消息效果更佳!
如果您在用douphp的订单会员模块并且在微信端使用,那么在处理订单的时候可以使用微信付款!
前提条件:
开通微信支付
微信公众号
会员关注了你的微信公众号
直接使用微信提供的sdk就可以,具体的操作办法如下!
1.下载微信提供的公众号内支付的sdk文件!
下载地址:https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip
2.解压后我们放在m/目录下即可(按照sdk/doc文件夹内的word文档修改配置信息)
3.假设我需要在order.php?rec=success (订单插入数据库成功的页面)增加微信支付按钮,并且发起支付 代码如下:
- //调用微信支付
- require_once "wx_pay/lib/WxPay.Api.php";
- require_once "wx_pay/example/WxPay.JsApiPay.php";
- require_once ‘wx_pay/example/log.php‘;
- //初始化日志
- $logHandler= new CLogFileHandler("wx_pay/logs/".date(‘Y-m-d‘).‘.log‘);
- $log = Log::Init($logHandler, 15);
- $fee = $order[‘order_amount‘] * 100;
- //①、获取用户openid
- $tools = new JsApiPay();
- $openId = $tools->GetOpenid();
- //echo $openId;
- //②、统一下单
- $input = new WxPayUnifiedOrder();
- $input->SetBody(‘订单编号:‘.$order[‘order_sn‘]);
- $input->SetAttach(‘订单编号:‘.$order[‘order_sn‘]);
- $input->SetOut_trade_no($order[‘order_sn‘]);
- $input->SetTotal_fee($fee);
- $input->SetTime_start(date("YmdHis"));
- $input->SetTime_expire(date("YmdHis", time() + 600));
- $input->SetGoods_tag("test");
- $input->SetNotify_url(‘yyhj.hbwelife.com/m/wx_pay_notify.php‘);
- $input->SetTrade_type("JSAPI");
- $input->SetOpenid($openId);
- $wx_order = WxPayApi::unifiedOrder($input);
- //echo ‘<font color="#f00"><b>统一下单支付单信息</b></font><br/>‘;
- //printf_info($wx_order);
- $jsApiParameters = $tools->GetJsApiParameters($wx_order);
- $smarty->assign("jsApiParameters", $jsApiParameters);
那么我们在order.dwt 中需要增加下面的代码:
- <script type="text/javascript">
- {literal}
- //前台调用微信JS api 支付
- function jsApiCall()
- {
- WeixinJSBridge.invoke(
- ‘getBrandWCPayRequest‘,{/literal}
- {$jsApiParameters},
- {literal}
- function(res){
- WeixinJSBridge.log(res.err_msg);
- //alert(res.err_code+res.err_desc+res.err_msg);
- if(res.err_msg == "get_brand_wcpay_request:ok"){
- //支付成功跳转到订单列表或者跳转到某个单页
- window.location.href="http://xxxxxx.com/m/user.php?rec=order_list";
- }
- }
- );
- }
- 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();
- }
- }
- {/literal}
- </script>
在页面中付款就可以调用 callpay()来直接支付!看演示图
支付成功之后的回调页面代码如下,我们需要更新订单状态:
php code:
- <?php
- define(‘IN_DOUCO‘, true);
- require (dirname(__FILE__) . ‘/include/init.php‘);
- require_once "wx_pay/lib/WxPay.Api.php";
- require_once "wx_pay/lib/WxPay.Notify.php";
- require_once ‘wx_pay/example/log.php‘;
- //初始化日志
- $logHandler= new CLogFileHandler("wx_pay/logs/".date(‘Y-m-d‘).‘.log‘);
- $log = Log::Init($logHandler, 15);
- class PayNotifyCallBack extends WxPayNotify
- {
- //查询订单
- public function Queryorder($transaction_id)
- {
- $input = new WxPayOrderQuery();
- $input->SetTransaction_id($transaction_id);
- $result = WxPayApi::orderQuery($input);
- Log::DEBUG("query:" . json_encode($result));
- if(array_key_exists("return_code", $result)
- && array_key_exists("result_code", $result)
- && $result["return_code"] == "SUCCESS"
- && $result["result_code"] == "SUCCESS")
- {
- return true;
- }
- return false;
- }
- //重写回调处理函数
- public function NotifyProcess($data, &$msg)
- {
- Log::DEBUG("call back:" . json_encode($data));
- $notfiyOutput = array();
- if(!array_key_exists("transaction_id", $data)){
- $msg = "输入参数不正确";
- return false;
- }
- //查询订单,判断订单真实性
- if(!$this->Queryorder($data["transaction_id"])){
- $msg = "订单查询失败";
- return false;
- }
- $order_sn = $data["out_trade_no"];
- //引入订单
- include_once (ROOT_PATH . ‘include/order.class.php‘);
- $dou_order = new Order();
- $dou_order->change_status($order_sn, 1);
- return true;
- }
- }
- Log::DEBUG("begin notify");
- $notify = new PayNotifyCallBack();
- $notify->Handle(false);
这样微信支付就完成了!之后更新,扫码支付!可以用在PC端的
以上是关于在douphp中加入微信支付教程的主要内容,如果未能解决你的问题,请参考以下文章