1. 程式人生 > >微信以及支付寶支付

微信以及支付寶支付

關於支付的流程之類的就不做解釋,大家可以自行搜尋!

  • 微信支付
專案前提:本人用的是tp框架,PHP語言
下載到微信平臺提供的微信支付介面檔案,放在了tp第三方類庫vendor,命名為WxpayAPI,
  
1 2 3 4 5 6 WxpayAPI/lib/WxPay.Api.php 介面訪問類; WxpayAPI/lib/WxPay.Config.php 配置賬號資訊; WxpayAPI/lib/WxPay.Data.php 資料物件基礎類; WxpayAPI/lib/WxPay.Exception.php 微信支付API異常類; WxpayAPI/lib/WxPay.Notify.php 回撥基礎類
WxpayAPI/example/WxPay.JsApiPay.php JSAPI支付實現類

1.對原始碼進行了部分修改

1 2 3 4 5 6 7 8 9 10 11 12 13 14 (1)WxPay.Api.php 裡註釋掉          //require_once "WxPay.Exception.php";          //require_once "WxPay.Config.php";          //require_once "WxPay.Data.php";   (2)WxPay.Config.php裡          需要根據商戶資訊對APPID , MCHID ,KEY , APPSECRET 進行配置。   (3)WxPay.Data.php 裡註釋掉          //require_once "WxPay.Config.php";          //require_once "WxPay.Exception.php";   (4)WxPay.JsApiPay.php 裡註釋掉          //require_once "../lib/WxPay.Api.php";

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

2.在訂單控制器GoodsController.class.php有訂單函式sure()和回撥資訊函式 Callback_url()

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 /** * 提交訂單函式 */ 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( "驗證碼錯誤!" );                 }                   #生成隨機訂單號                 $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' ;                 }                 //函式呼叫 返回資訊                 $this ->Callback_url( $data );             } else {                 $this ->error( $o_model ->getError());             }         } else {             $this ->error( $o_model ->getError());         }     }        /**      * 回撥資訊函式      * @param type $data      */     public function Callback_url( $data ) {         $o_model = D( "Wine/Orders" );         $add_id = $o_model ->add( $data );         if (! $add_id ) {             $this ->error( "訂單提交失敗,請稍後重試!" );         }       if ( '4' == $data [ 'pay_id' ]) {             if ( '4' == $data [ 'pay_id' ]) {             //微信支付             $msg = '正在為您跳轉到微信支付頁面,請等待……' ;             $url = "/index.php/wine/wxpay/index/?o_id=$add_id" ;        }         $this ->success( "訂單提交成功!" . $msg , $url );     }

3.[重點!!!] WxpayController .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 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   /**   * 微信支付介面呼叫   */   namespace Wine\Controller;   use Common\Controller\HomebaseController;   class WxpayController extends HomebaseController {        public function _initialize() {          parent::_initialize();            Vendor( "WxpayAPI/example/log" ); //訂單資料寫入日誌          //注: 引入第三方類庫中的微信介面檔案,對於檔名含有.的,皆用#代替連線才能引入,字尾名不寫。          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' ;      }        /**       * 顯示支付頁面       *       */      public function index() {          // 判斷當前訂單是否被支付          $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代表訂單待支付的狀態          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"; #無法使用          //②、統一下單          $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);實際支付價格          $input ->SetTotal_fee( $info [ 'pay_price' ]*100); //測試時請將支付價格改為0.01,土豪請避開此註釋          $this ->assign( 'pay_price' , $info [ 'pay_price' ]);          $input ->SetTime_start( date ( "YmdHis" ));          $input ->SetTime_expire( date ( "YmdHis" , time() + 600)); //        $input->SetGoods_tag("test");# 優惠券          $input ->SetNotify_url( 'http://