亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

php語言

PHP后臺(tái)微信支付使用方法

時(shí)間:2025-02-11 03:13:09 php語言 我要投稿
  • 相關(guān)推薦

PHP后臺(tái)微信支付使用方法

  主要為大家詳細(xì)介紹了PHP后臺(tái)微信支付和支付寶支付開發(fā)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下.

  微信支付

  項(xiàng)目前提:本人用的是tp框架,PHP語言

  下載到微信平臺(tái)提供的微信支付接口文件,放在了tp第三方類庫(kù)vendor,命名為WxpayAPI

  WxpayAPI/lib/WxPay.Api.php 接口訪問類;

  WxpayAPI/lib/WxPay.Config.php 配置賬號(hào)信息;

  WxpayAPI/lib/WxPay.Data.php 數(shù)據(jù)對(duì)象基礎(chǔ)類;

  WxpayAPI/lib/WxPay.Exception.php 微信支付API異常類;

  WxpayAPI/lib/WxPay.Notify.php 回調(diào)基礎(chǔ)類

  WxpayAPI/example/WxPay.JsApiPay.php JSAPI支付實(shí)現(xiàn)類

  1.對(duì)源碼進(jìn)行了部分修改

  (1)WxPay.Api.php 里注釋掉

  //require_once "WxPay.Exception.php";

  //require_once "WxPay.Config.php";

  //require_once "WxPay.Data.php";

 。2)WxPay.Config.php里

  需要根據(jù)商戶信息對(duì)APPID , MCHID ,KEY , APPSECRET 進(jìn)行配置。

 。3)WxPay.Data.php 里注釋掉

  //require_once "WxPay.Config.php";

  //require_once "WxPay.Exception.php";

  (4)WxPay.JsApiPay.php 里注釋掉

  //require_once "../lib/WxPay.Api.php";

  配置好這些,接下來就是我們的重點(diǎn)部分了。

  2.在訂單控制器GoodsController.class.php有訂單函數(shù)sure()和回調(diào)信息函數(shù) Callback_url()

  /**

  * 提交訂單函數(shù)

  */

  public function sure() {

  $o_model = D("Wine/Orders");

  if (IS_AJAX) {

  $data = I("post.");

  if ($o_model->create($data)) {

  if (!sp_check_verify_code()) {

  $this->error("驗(yàn)證碼錯(cuò)誤!");

  }

  #生成隨機(jī)訂單號(hào)

  $order_code = 'O' . date('YmdHis') . $o_model->get_order_code(4);

  while ($o_model->findone(array("order_code" => $order_code))) {

  $order_code = 'O' . date('YmdHis') . $o_model->get_order_code(4);

  }

  $data['order_code'] = $order_code;

  $addr[0] = $_POST['prov'];

  $addr[1] = $_POST['city'];

  $addr[2] = $_POST['dist'];

  $addr[3] = $_POST['area'];

  $data['area'] = serialize($addr);

  $data['create_time'] = time();

  $data['update_time'] = time();

  if ($data['pay_id'] == 1) {

  $data['order_status'] = 11; //已付款

  $data['status'] = '1';

  } else {

  $data['order_status'] = 10; //待付款

  $data['status'] = '1';

  }

  //函數(shù)調(diào)用 返回信息

  $this->Callback_url($data);

  } else {

  $this->error($o_model->getError());

  }

  } else {

  $this->error($o_model->getError());

  }

  }

  /**

  * 回調(diào)信息函數(shù)

  * @param type $data

  */

  public function Callback_url($data) {

  $o_model = D("Wine/Orders");

  $add_id = $o_model->add($data);

  if (!$add_id) {

  $this->error("訂單提交失敗,請(qǐng)稍后重試!");

  }

  if ('4' == $data['pay_id']) {

  if ('4' == $data['pay_id']) {

  //微信支付

  $msg = '正在為您跳轉(zhuǎn)到微信支付頁(yè)面,請(qǐng)等待……';

  $url = "/index.php/wine/wxpay/index/?o_id=$add_id";

  }

  $this->success("訂單提交成功!" . $msg, $url);

  }

  3.[重點(diǎn)。!] WxpayController .class.php微信支付控制器,實(shí)現(xiàn)對(duì)微信接口的調(diào)用

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  29

  30

  31

  32

  33

  34

  35

  36

  37

  38

  39

  40

  41

  42

  43

  44

  45

  46

  47

  48

  49

  50

  51

  52

  53

  54

  55

  56

  57

  58

  59

  60

  61

  62

  63

  64

  65

  66

  67

  68

  69

  70

  71

  72

  73

  74

  75

  76

  77

  78

  79

  80

  81

  82

  83

  84

  85

  86

  87

  88

  89

  90

  91

  92

  93

  94

  95

  96

  97

  98

  99

  100

  101

  102

  103

  104

  105

  106

  107

  108

  109

  110

  111

  112

  113

  114

  115

  116

  117

  118

  119

  120

  121

  122

  123

  124

  125

  126

  127

  128

  129

  130

  131

  132

  133

  134

  135

  136

  137

  138

  139

  140

  141

  142

  143

  144

  145

  146

  147

  148

  149

  <?php

  /**

  * 微信支付接口調(diào)用

  */

  namespace Wine\Controller;

  use Common\Controller\HomebaseController;

  class WxpayController extends HomebaseController {

  public function _initialize() {

  parent::_initialize();

  Vendor("WxpayAPI/example/log");//訂單數(shù)據(jù)寫入日志

  //注: 引入第三方類庫(kù)中的微信接口文件,對(duì)于文件名含有.的,皆用#代替連接才能引入,后綴名不寫。

  Vendor("WxpayAPI/example/WxPay#JsApiPay");

  Vendor("WxpayAPI/lib/WxPay#Config");

  Vendor("WxpayAPI/lib/WxPay#Data");

  Vendor("WxpayAPI/lib/WxPay#Exception");

  Vendor("WxpayAPI/lib/WxPay#Notify");

  Vendor("WxpayAPI/lib/WxPay#Api");

  //初始化日志

  $logHandler = new \CLogFileHandler("/projects/wine.huishuocs.com/data/pay_log/" . date('Y-m-d') . '.log');

  $log = \Log::Init($logHandler, 15);

  $this->model = D("Wine/Orders");

  $this->url = MODULE_NAME . '/' . CONTROLLER_NAME . '/index';

  }

  /**

  * 顯示支付頁(yè)面

  *

  */

  public function index() {

  // 判斷當(dāng)前訂單是否被支付

  $orderid = I("get.o_id", 0, "intval");

  $orderid || $this->error("非法操作!");

  $this->assign('orderid',$orderid);

  $info = $this->model->findone(array("a.id" => $orderid, 'a.status' => array('neq', '-1')));

  $info || $this->error("暫未查詢到該訂單!");

  //10代表訂單待支付的狀態(tài)

  if ($info['order_status'] != 10) {

  $this->error("訂單已支付!");

  }

  //①、獲取用戶openid

  $tools = new \JsApiPay();

  $openId = $tools->GetOpenid(); #無法使用

  //初始化日志

  \Log::INFO('訂單' . var_export($info, true));

  $out_trade_no = \WxPayConfig::MCHID . date("YmdHis");

  $this->model->where(array("id" => $orderid))->save(array('out_trade_no' => $out_trade_no));

  //  $openId ="123"; #無法使用

  //②、統(tǒng)一下單

  $input = new \WxPayUnifiedOrder();

  $input->SetBody($info['mode_name']);

  $input->SetAttach($orderid);

  $input->SetOut_trade_no($out_trade_no);

  //  $input->SetTotal_fee($orderArr['total_price']*100);實(shí)際支付價(jià)格

  $input->SetTotal_fee($info['pay_price']*100); //測(cè)試時(shí)請(qǐng)將支付價(jià)格改為0.01,土豪請(qǐng)避開此注釋

  $this->assign('pay_price',$info['pay_price']);

  $input->SetTime_start(date("YmdHis"));

  $input->SetTime_expire(date("YmdHis", time() + 600));

  //  $input->SetGoods_tag("test");# 優(yōu)惠券

  $input->SetNotify_url('http://' . $_SERVER['HTTP_HOST'] . "/index.php/Wine/Wxpay/callback"); //回調(diào)地址

  $input->SetTrade_type("JSAPI");

  $input->SetOpenid($openId);

  $order = \WxPayApi::unifiedOrder($input);

  //  echo '<font color="#f00"><b>統(tǒng)一下單支付單信息</b></font><br/>';

  //  $this->printf_info($order);//打印參數(shù)

  $this->assign('o_id',$orderid);

  $this->assign('jsApiParameters', $tools->GetJsApiParameters($order));

  //獲取共享收貨地址js函數(shù)參數(shù)

  //  $this->assign('editAddress', $tools->GetEditAddressParameters());

  $this->display('wxpay');

  exit;

  }

  /**

  * 打印輸出數(shù)組信息

  * @param type $data

  */

  public function printf_info($data) {

  foreach ($data as $key => $value) {

  echo "<font color='#00ff55;'>$key</font> : $value <br/>";

  }

  }

  /* 支付成功回調(diào)函數(shù) */

  public function callback() {

  /* 返回給微信服務(wù)器 */

  //  $mes = array(

  //   'return_code' => 'SUCCESS',

  //   'return_msg' => 'OK'

  //  );

  //  $this->ajaxReturn($mes, 'XML');

  $logHandler = new \CLogFileHandler("/projects/wine.huishuocs.com/data/pay_log/" . date('Y-m-d') . '.log');

  $log = \Log::Init($logHandler, 15);

  //$streamData = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

  $streamData = file_get_contents('php://input');

  if ($streamData != '') {

  $arr = $this->xmlToArray($streamData);

  \Log::INFO('支付' . var_export($arr, true));

  } else {

  $ret = false;

  }

  // 回調(diào)值

  if (!empty($arr)) {

  # 數(shù)據(jù)

  \Log::INFO('數(shù)據(jù)1' . var_export($arr, true));

  #修改訂單狀態(tài)

  $out_trade_no = $arr['out_trade_no'];

  $newArr = array('order_status' => 11,'status'=>1);

  $this->model->where(array("out_trade_no" => $out_trade_no))->save($newArr);

  $info = $this->model->findone(array("a.out_trade_no" => $out_trade_no, 'a.status' => array('neq', '-1')));

  $sql = $this->model->getLastSql();

  \Log::INFO('數(shù)據(jù)2' . $sql);

  #添加支付記錄pay

  $pay = array(

  'payment_code' => 'wxpay',

  'trade_no'=>$info['order_code'],

  'out_trade_no'=>$out_trade_no,

  'order_id'=>$info['id'],

  'create_time'=>time()

  );

  M('payment_record')->add($pay);

  }

  /* 返回給微信服務(wù)器 */

  $mes = array(

  'return_code' => 'SUCCESS',

  'return_msg' => 'OK'

  );

  $this->ajaxReturn($mes, 'XML');

  }

  //將XML轉(zhuǎn)為array

  public function xmlToArray($xml) {

  //禁止引用外部xml實(shí)體

  libxml_disable_entity_loader(true);

  $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

  return $values;

  }

  }

  ?>

  4.前端微信支付頁(yè)面wxpay.html

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  29

  30

  31

  32

  33

  34

  35

  36

  37

  38

  39

  40

  41

  42

  43

  44

  45

  46

  47

  48

  49

  50

  51

  52

  53

  54

  55

  56

  57

  58

  59

  60

  61

  62

  63

  64

  65

  <html>

  <head>

  <meta http-equiv="content-type" content="text/html;charset=utf-8"/>

  <meta name="viewport" content="width=device-width, initial-scale=1"/>

  <link href="__TMPL__Public/css/weui.css" rel="external nofollow" type="text/css" rel="stylesheet"/>

  <title>微信訂單支付</title>

  <script type="text/javascript">

  //調(diào)用微信JS api 支付

  function jsApiCall()

  {

  WeixinJSBridge.invoke(

  'getBrandWCPayRequest',

  <php> echo $jsApiParameters; </php>,

  function(res) {

  WeixinJSBridge.log(res.err_msg);

  if (res.err_msg == "get_brand_wcpay_request:ok") {

  //       alert(res.err_code + res.err_desc + res.err_msg);

  // 成功跳轉(zhuǎn)頁(yè)面

  window.location.href = '{:U("Orders/pay_ok",array("o_id"=>$o_id))}';

  } else {

  // 統(tǒng)一跳轉(zhuǎn)

  }

  }

  );

  }

  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>

  </head>

  <body>

  <br/>

  <p class="container" id="container"><p class="msg">

  <p class="weui_msg">

  <p class="weui_icon_area"><i class="weui_icon_success weui_icon_msg"></i></p>

  <p class="weui_text_area">

  <h2 class="weui_msg_title">訂單已生成</h2>

  <p class="weui_msg_desc">該筆訂單支付金額為:<php> echo $pay_price;</php></p>

  </p>

  <p class="weui_opr_area">

  <p class="weui_btn_area">

  <a href="javascript:;" rel="external nofollow" class="weui_btn weui_btn_primary" onclick="callpay()">立即支付</a>

  <!--<a href="{:U('Order/pay_ok',array('o_id'=>$_GET['o_id']))}" rel="external nofollow" class="weui_btn weui_btn_default">取消支付</a>-->

  </p>

  </p>

  <!--     <p class="weui_extra_area">

  <a href="/wap/order/order_det/<?php echo $order['id']?>.html" rel="external nofollow" >查看詳情</a>

  </p>-->

  </p>

  </p>

  </p>

  </body>

  </html>

  5.支付成功跳轉(zhuǎn)到OrderController.class.php ,訂單支付完成

  ?

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  /**

  * 支付頁(yè)面

  */

  public function pay_ok() {

  $o_id = I("get.o_id", 0, "intval");

  $info = $this->model->findone(array("a.id" => $o_id, 'a.status' => array('neq', '-1')));

  if (empty($info)) {

  # 獲取最新可用的商品編號(hào)

  $goods = D('Goods')->where(array('status' => '1'))->order('id desc')->find();

  $this->error("該訂單不存在,請(qǐng)重新正確進(jìn)入", U('Goods/sale', array('id' => $goods['id'])));

  }

  $this->assign('imgurl', "/wine/img/ok.png");

  $this->assign('tips', "訂購(gòu)成功");

  if ('4' == $info['pay_id']) {

  //微信支付成功

  $this->assign($info);

  $this->display();

  } else {

  $this->assign($info);

  $this->assign('tips', "訂購(gòu)失敗");

  $this->assign('imgurl', "/wine/img/nook.png");

  $this->display();

  }

  }

【PHP后臺(tái)微信支付使用方法】相關(guān)文章:

PHP開發(fā)微信支付實(shí)例代碼03-25

php微信支付之APP支付方法04-20

PHP中trait的使用方法12-26

PHP autoload函數(shù)的使用方法01-02

php中cookie的使用方法05-03

PHP如何開發(fā)paypal支付插件07-22

PHP微信jssdk配置03-28

PHP中session使用方法詳解03-03

php中iconv函數(shù)使用方法05-21