Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53158
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-12 11:48
文章分类
文章存档

2016年(48)

我的朋友

分类: PHP

2016-12-08 17:01:38

wemall-mobile是基于WeMall的 app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。本文分享Native(原生)支付模式一demo,供技术员参考学习。

wemall官网地址:

支付完成后,微信会把相关支付和用户信息发送到商户设定的通知URL,商户接收回调信息后,根据需要设定相应的处理流程。 这里举例使用log文件形式记录回调信息。


  notify_url.php


点击(此处)折叠或打开

  1. <?php
  2.     include_once("./log_.php");
  3.     include_once('../../config.php');
  4.     
  5.     //使用通用通知接口
  6.     $notify = new Notify_pub();

  7.     //存储微信的回调
  8.     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];    
  9.     $notify->saveData($xml);
  10.     
  11.     //验证签名,并回应微信。
  12.     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
  13.     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
  14.     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
  15.     if($notify->checkSign() == FALSE){
  16.         $notify->setReturnParameter("return_code","FAIL");//返回状态码
  17.         $notify->setReturnParameter("return_msg","签名失败");//返回信息
  18.     }else{
  19.         $notify->setReturnParameter("return_code","SUCCESS");//设置返回码
  20.     }
  21.     $returnXml = $notify->returnXml();
  22.     echo $returnXml;

  23.     //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
  24.     
  25.     //以log文件形式记录回调信息
  26.     $log_ = new Log_();
  27.     $log_name="./notify_url.log";//log文件路径
  28.     $log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");

  29.     if($notify->checkSign() == TRUE)
  30.     {
  31.         if ($notify->data["return_code"] == "FAIL") {
  32.             //此处应该更新一下订单状态,商户自行增删操作
  33.             $log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
  34.         }
  35.         elseif($notify->data["result_code"] == "FAIL"){
  36.             //此处应该更新一下订单状态,商户自行增删操作
  37.             $log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
  38.         }
  39.         else{
  40.             //此处应该更新一下订单状态,商户自行增删操作
  41.             $log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
  42.         }        
  43.         //商户自行增加处理流程,
  44.         //例如:更新订单状态
  45.         //例如:数据库操作
  46.         //例如:推送支付完成信息
  47.         $xml = $notify->xmlToArray($xml);
  48.         // 商户订单号
  49.         $out_trade_no = $xml ['out_trade_no'];
  50.         $total_fee = $xml ['total_fee'];

  51.         $uid = $xml ['openid'];
  52.         $log_->log_result($log_name,"【订单号】:\n".$out_trade_no."\n");
  53.         // 判断该笔订单是否在商户网站中已经做过处理
  54.         // 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
  55.         // 如果有做过处理,不执行商户的业务程序
  56.         if (! empty ( $out_trade_no )) {
  57.             $sql = "update " . DB_PREFIX . "order set pay_status=1 where orderid='" . $out_trade_no . "'";
  58.             mysql_query ( $sql, $conn );
  59.         }
  60.     }
  61. ?>


 log_.php

 

点击(此处)折叠或打开

  1. <?php

  2. class Log_
  3. {
  4.     // 打印log
  5.     function log_result($file,$word)
  6.     {
  7.      $fp = fopen($file,"a");
  8.      flock($fp, LOCK_EX) ;
  9.      fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n");
  10.      flock($fp, LOCK_UN);
  11.      fclose($fp);
  12.     }
  13. }

  14. ?>


 config.php


点击(此处)折叠或打开

  1. <?php
  2.     header('Content-Type:text/html; charset=utf-8');
  3.     error_reporting(E_ALL & ~E_NOTICE);
  4.     
  5.     define('DB_HOST', 'localhost');
  6.     define('DB_USER', 'root');
  7.     define('DB_PWD', 'root');
  8.     define('DB_NAME', 'open');
  9.     define('DB_PREFIX', 'wemall_');
  10.     
  11.     $conn = @mysql_connect(DB_HOST, DB_USER, DB_PWD) or die('数据库链接失败:'.mysql_error());
  12.     
  13.     @mysql_select_db(DB_NAME) or die('数据库错误:'.mysql_error());
  14.     
  15.     @mysql_query('SET NAMES UTF8') or die('字符集错误:'.mysql_error());
  16. ?>


  WeMall - 开源微商城 微信商城 商城源码 分销商城 b2b2c商城系统

wemall官网地址:

wemall


阅读(1095) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~