在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 (订单插入数据库成功的页面)增加微信支付按钮,并且发起支付 代码如下:

  1. //调用微信支付
  2. require_once "wx_pay/lib/WxPay.Api.php";
  3. require_once "wx_pay/example/WxPay.JsApiPay.php";
  4. require_once ‘wx_pay/example/log.php‘;
  5. //初始化日志
  6. $logHandler= new CLogFileHandler("wx_pay/logs/".date(‘Y-m-d‘).‘.log‘);
  7. $log = Log::Init($logHandler, 15);
  8. $fee =  $order[‘order_amount‘] * 100;
  9. //①、获取用户openid
  10. $tools = new JsApiPay();
  11. $openId = $tools->GetOpenid();
  12. //echo $openId;
  13. //②、统一下单
  14. $input = new WxPayUnifiedOrder();
  15. $input->SetBody(‘订单编号:‘.$order[‘order_sn‘]);
  16. $input->SetAttach(‘订单编号:‘.$order[‘order_sn‘]);
  17. $input->SetOut_trade_no($order[‘order_sn‘]);
  18. $input->SetTotal_fee($fee);
  19. $input->SetTime_start(date("YmdHis"));
  20. $input->SetTime_expire(date("YmdHis", time() + 600));
  21. $input->SetGoods_tag("test");
  22. $input->SetNotify_url(‘yyhj.hbwelife.com/m/wx_pay_notify.php‘);
  23. $input->SetTrade_type("JSAPI");
  24. $input->SetOpenid($openId);
  25. $wx_order = WxPayApi::unifiedOrder($input);
  26. //echo ‘<font color="#f00"><b>统一下单支付单信息</b></font><br/>‘;
  27. //printf_info($wx_order);
  28. $jsApiParameters = $tools->GetJsApiParameters($wx_order);
  29. $smarty->assign("jsApiParameters", $jsApiParameters);

复制代码

那么我们在order.dwt 中需要增加下面的代码:

  1. <script type="text/javascript">
  2. {literal}
  3. //前台调用微信JS api 支付
  4. function jsApiCall()
  5. {
  6. WeixinJSBridge.invoke(
  7. ‘getBrandWCPayRequest‘,{/literal}
  8. {$jsApiParameters},
  9. {literal}
  10. function(res){
  11. WeixinJSBridge.log(res.err_msg);
  12. //alert(res.err_code+res.err_desc+res.err_msg);
  13. if(res.err_msg == "get_brand_wcpay_request:ok"){
  14. //支付成功跳转到订单列表或者跳转到某个单页
  15. window.location.href="http://xxxxxx.com/m/user.php?rec=order_list";
  16. }
  17. }
  18. );
  19. }
  20. function callpay()
  21. {
  22. if (typeof WeixinJSBridge == "undefined"){
  23. if( document.addEventListener ){
  24. document.addEventListener(‘WeixinJSBridgeReady‘, jsApiCall, false);
  25. }else if (document.attachEvent){
  26. document.attachEvent(‘WeixinJSBridgeReady‘, jsApiCall);
  27. document.attachEvent(‘onWeixinJSBridgeReady‘, jsApiCall);
  28. }
  29. }else{
  30. jsApiCall();
  31. }
  32. }
  33. {/literal}
  34. </script>

复制代码

在页面中付款就可以调用 callpay()来直接支付!看演示图

支付成功之后的回调页面代码如下,我们需要更新订单状态:
php code:

  1. <?php
  2. define(‘IN_DOUCO‘, true);
  3. require (dirname(__FILE__) . ‘/include/init.php‘);
  4. require_once "wx_pay/lib/WxPay.Api.php";
  5. require_once "wx_pay/lib/WxPay.Notify.php";
  6. require_once ‘wx_pay/example/log.php‘;
  7. //初始化日志
  8. $logHandler= new CLogFileHandler("wx_pay/logs/".date(‘Y-m-d‘).‘.log‘);
  9. $log = Log::Init($logHandler, 15);
  10. class PayNotifyCallBack extends WxPayNotify
  11. {
  12. //查询订单
  13. public function Queryorder($transaction_id)
  14. {
  15. $input = new WxPayOrderQuery();
  16. $input->SetTransaction_id($transaction_id);
  17. $result = WxPayApi::orderQuery($input);
  18. Log::DEBUG("query:" . json_encode($result));
  19. if(array_key_exists("return_code", $result)
  20. && array_key_exists("result_code", $result)
  21. && $result["return_code"] == "SUCCESS"
  22. && $result["result_code"] == "SUCCESS")
  23. {
  24. return true;
  25. }
  26. return false;
  27. }
  28. //重写回调处理函数
  29. public function NotifyProcess($data, &$msg)
  30. {
  31. Log::DEBUG("call back:" . json_encode($data));
  32. $notfiyOutput = array();
  33. if(!array_key_exists("transaction_id", $data)){
  34. $msg = "输入参数不正确";
  35. return false;
  36. }
  37. //查询订单,判断订单真实性
  38. if(!$this->Queryorder($data["transaction_id"])){
  39. $msg = "订单查询失败";
  40. return false;
  41. }
  42. $order_sn = $data["out_trade_no"];
  43. //引入订单
  44. include_once (ROOT_PATH . ‘include/order.class.php‘);
  45. $dou_order = new Order();
  46. $dou_order->change_status($order_sn, 1);
  47. return true;
  48. }
  49. }
  50. Log::DEBUG("begin notify");
  51. $notify = new PayNotifyCallBack();
  52. $notify->Handle(false);

复制代码

这样微信支付就完成了!之后更新,扫码支付!可以用在PC端的

时间: 2024-12-16 08:53:54

在douphp中加入微信支付教程的相关文章

微信支付教程系列之扫码支付

微信支付教程系列之扫码支付 http://www.cnblogs.com/nangong/p/9fa625bfb92a986125f0ba72704c46ec.html 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码.扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多.例如我们在地铁.公交站常见

【原创分享&#183;微信支付】 C# 微信支付教程系列之扫码支付

微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码.扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多.例如我们在地铁.公交站常见的那些自动售货机(不错,就是那种投硬币,就可以自动出货的那种机器)中都用到.以前,那种机器,只能通过投硬币或者纸币,但是,这里面也有一定的风险

微信支付教程系列之现金红包

目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及时获取当前用户Openid及注意事项 (六)微信公众号开发之扫码支付 (七)微信公众号开发之公众号支付 (八)微信公众号开发之现金红包 微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想

C# MVC 微信支付教程系列之公众号支付

微信支付教程系列之公众号支付   今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通过公众号里面的菜单链接,进入公众号的商城,然后在里面完成购买和支付功能,我们可以看看官方对这个公众号支付的场景的解释,链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1,通过这个官方的解释,那我们大概清楚这个公众号的用途了,下面,我就说

基于PHP的微信支付教程

微信支付作为各大移动支付方式之一,本课程只要向大家介绍并使用微信支付的常用功能,进而集合到已有的项目中去,希望各位能够快速上手并掌握实战"干货". 出处至:汇智网  hubwiz.com 准备工作 关于微信支付 1. 生活中的微信支付 ??目前我们日常生活中接触得比较多的线上电子支付方式主要有两种,一种是支付宝,另一种就是微信支付了,微信支付是集成在微信客户端的支付功能,所谓微信客户端,主要是微信的移动应用,例如安卓(Android)微信APP.IOS微信APP,用户可以通过手机的微信

iOS中 最新微信支付/最全的微信支付教程具体解释 韩俊强的博客

亲们, 首先让我们来看一下微信支付的流程吧. 1. 注冊微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些參数. 2. 下载微信支付sdk 3. client请求订单,后台与微信后台交互.返回给client支付參数 4. 调用微信client.由微信client和微信server打交道: 5. client和服务端都会收到支付结果:(前台消息不可靠.我们须要去后台验证,假设后台没有收到支付通知.后台去微信server验证然后将结果返回给client)

iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数. 2. 下载微信支付sdk 3. 客户端请求订单,后台与微信后台交互,返回给客户端支付参数 4. 调用微信客户端,由微信客户端和微信服务器打交道: 5. 客户端和服务端都会收到支付结果:(前台消息不可靠,我们需要去后台验证,如果后台没有收到支付通知,后台去微

微信商城中使用微信支付接口获取用户地址

授人以鱼不如授人以渔 微信支付获取用户地址 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能. 微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入地址信息的繁复流程,提高用户体验. 但是可能是因为牵扯到用户隐私,所以在使用过程中,需要用户自己主动选择使用该功能,并且是通过点击的操作,我们才可以获取到用户的收货地址,这一点是要注意的. 操作流程如下: 1.用户打开购物车页面,点击结算,跳转到一个微信的oauth2的页面,地址为:https://open.we

C#在Linux+Mono环境中使用微信支付证书

最近特殊的需求,要把微信平台一个功能页面部署到Linux(CentOS6.5)下,其中涉及到微信支付退款. 鉴于之前实践过mono+jexus+asp.net mvc的部署,于是问题重点在于解决对商户证书的调用问题. 查看微信支付官方文档关于证书的使用说明 ◆ apiclient_cert.p12是商户证书文件,除PHP外的开发均使用此证书文件. ◆ 商户如果使用.NET环境开发,请确认Framework版本大于2.0,必须在操作系统上双击安装证书apiclient_cert.p12后才能被正常