6 微信支付

調試工具可以使用微信web開發(fā)者工具https://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html#.E4.B8.8B.E8.BD.BD.E5.9C.B0.E5.9D.80

  1. 支付前準備
  • 微信支付,要求有服務號,且認證后的.
    當申請支付功能后, 會收到2個參數(shù), 商戶id,和商戶key.
    注意,這2個參數(shù),不要和微信的參數(shù)混淆.
    微信參數(shù): appid, appkey, token
    支付參數(shù): merchant_id(商戶號), key(支付密鑰)
  • 開發(fā)中支付密鑰怎么得到?
    答: 找老板要(用戶或者公司有用來測試)
    https://pay.weixin.qq.com -->賬戶中心-->API安全-->設置API密鑰
    自行設置一個32位的密鑰
  • 在微信支付-開發(fā)配置-配置測試授權目錄(測試域名)揽咕,測試白名單('用來支付測試'),支付授權目錄先不用填仍源,測試跑通之后再填心褐;
  1. 支付思路(https://easywechat.org/zh-cn/docs/payment.html
    在wechat中的支付流程:
  1. 得到支付對象payment
  2. 把訂單對象order(訂單號,金額,openid,放在 $attributes以參數(shù)傳入),
  3. 預處理,得到一個預處理id, payment->prepare(order);
  4. 生成json配置
  5. 把json寫在模板中,觸發(fā)js
    如下:
//前端頁面添加js
xxForm.onsubmit = function() {
    WeixinJSBridge.invoke(
           'getBrandWCPayRequest', {!!$json!!},
           function(res){
               if(res.err_msg == "get_brand_wcpay_request:ok" ) {
                    // 使用以上方式判斷前端返回,微信團隊鄭重提示:
                    // res.err_msg將在用戶支付成功后返回
                    // ok,但并不保證它絕對可靠笼踩。
               }
           }
       );
    return false;
}

3 demo

//done頁面處理支付準備
public function done() {
        if( !$req->session()->has('user') ) {//判斷是否有用戶名
            return redirect('center');
        }
        //接收POST數(shù)據(jù)(如地址逗爹,手機號,姓名)和登陸用戶的session數(shù)據(jù)(如uid)嚎于,寫入orders表
        $order = new Order();
        $order->ordsn = date('Ymd').mt_rand(1000000,9999999);
        //用戶信息
        //dd(session()->get('user'));
        $order->openid = session()->get('user')['id'];
        $order->xm = $req->xm;//用戶姓名
        $order->tel = $req->mobile;//用戶電話
        $order->address = $req->address;//用戶地址
        $order->money = Cart::getTotal();//總價
        $order->ispay = 0;//未支付
        $order->ordtime = time(); //訂單生成時間
        $order->save();//插入數(shù)據(jù)庫orders表
        //相應產(chǎn)品插入到items表
        $goods = Cart::getContent();//所有購物車商品(購物車只能全結賬)     
        foreach($goods as $v){
            $item = new Item();
            $item->oid = $order->oid;//訂單的自增id
            $item->gid = $v['id'];//訂單id
            $item->goods_name = $v['name'];//商品名稱
            $item->price = $v['price'];//商品價格
            $item->amount = $v['quantity'];//商品數(shù)量
            $item->save();          
        }
        Cart::clear();//清空購物車
        // 準備微信支付
        // 1.創(chuàng)建支付對象
        $payment = $this->app->payment;
        // 2. 創(chuàng)建訂單對象
        $attributes = [
            'trade_type'       => 'JSAPI', // JSAPI掘而,NATIVE,APP...
            'body'             => '鮮花',
            'detail'           => '好多鮮花',
            'out_trade_no'     => $order->ordsn,
            'total_fee'        => intval($order->money*100),
            'openid'            =>$order->openid,
            'notify_url'       => 'http://7de41313.ittun.com/pay',//支付完成回調url
            // ...
        ];
        $wxorder = new WxOrder($attributes);
        // 3. 預處理
        $result = $payment->prepare($wxorder);
        if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS
            $prepayId = $result->prepay_id;
        }
        // 4. 得到支付的JS配置
        $json = $payment->configForPayment($prepayId);
        return view('done' , ['ordsn'=>$order->ordsn , 'json'=>$json]);
}
//  JS調用
$('form').submit(function(){
    WeixinJSBridge.invoke(
           'getBrandWCPayRequest', {!!$json!!},
           function(res){
               if(res.err_msg == "get_brand_wcpay_request:ok" ) {
                    // 使用以上方式判斷前端返回,微信團隊鄭重提示:
                    // res.err_msg將在用戶支付成功后返回
                    // ok于购,但并不保證它絕對可靠袍睡。
               }
           }
       );
    return false;
});
public function pay(Request $req){
        //調用微信支付接口
        //先默認支付完成
        $order = Order::where('ordsn',$req->ordsn)->first();
        $order->ispay = 1;//修改訂  單狀態(tài)為支付
        $order->save();
        $money = $order->money;//獲取支付金額
        $openid = session()->get('user')['id'];//當前微信的openid
        $user = User::where('openid',$openid)->first();
        //分錢
        foreach(['0.5'=>$user->p1,'0.25'=>$user->p2,'0.1'=>$user->p3] as $rate=>$p){
             if($p > 0) {
                $fee = new Fenxiao();
                $fee->uid = $p;//受益人id
                $fee->byid= $user->uid;//購買者id
                $fee->oid= $order->oid;//訂單 id
                $fee->money= $order->money * $rate;//受益者分得資產(chǎn)
                $fee->save();
             } 
            return '購物成功';
        }       
    }
//pay函數(shù)處理支付回調
public function pay(Request $req){
     //支付完成處理回調函數(shù)
        $response = $app->payment->handleNotify(function($notify, $successful){
            //out_trade_no為商家訂單號    
            $order = Order::where('ordsn',$notify->out_trade_no)->first();
            if (!$order) { // 如果訂單不存在
                return '支付失敗'; 
            }
            $order->ispay = 1;//修改訂單狀態(tài)為支付
            $order->save();
            $money = $order->money;//獲取支付金額
            $openid = session()->get('user')['id'];//當前微信的openid
            $user = User::where('openid',$openid)->first();
            //分錢
            foreach(['0.5'=>$user->p1,'0.25'=>$user->p2,'0.1'=>$user->p3] as $rate=>$p){
                 if($p > 0) {
                    $fee = new Fenxiao();
                    $fee->uid = $p;//受益人id
                    $fee->byid= $user->uid;//購買者id
                    $fee->oid= $order->oid;//訂單 id
                    $fee->money= $order->money * $rate;//受益者分得資產(chǎn)
                    $fee->save();
                 } 
            }
        });
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肋僧,隨后出現(xiàn)的幾起案子斑胜,更是在濱河造成了極大的恐慌控淡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件止潘,死亡現(xiàn)場離奇詭異掺炭,居然都是意外死亡,警方通過查閱死者的電腦和手機凭戴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門涧狮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人么夫,你說我怎么就攤上這事者冤。” “怎么了档痪?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵涉枫,是天一觀的道長。 經(jīng)常有香客問我钞它,道長拜银,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任遭垛,我火速辦了婚禮尼桶,結果婚禮上,老公的妹妹穿的比我還像新娘锯仪。我一直安慰自己泵督,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布庶喜。 她就那樣靜靜地躺著小腊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪久窟。 梳的紋絲不亂的頭發(fā)上秩冈,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音斥扛,去河邊找鬼入问。 笑死,一個胖子當著我的面吹牛稀颁,可吹牛的內容都是我干的芬失。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匾灶,長吁一口氣:“原來是場噩夢啊……” “哼棱烂!你這毒婦竟也來了?” 一聲冷哼從身側響起阶女,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嫉父,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岗喉。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芍秆,靈堂內的尸體忽然破棺而出惯疙,到底是詐尸還是另有隱情,我是刑警寧澤妖啥,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布霉颠,位于F島的核電站,受9級特大地震影響荆虱,放射性物質發(fā)生泄漏蒿偎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一怀读、第九天 我趴在偏房一處隱蔽的房頂上張望诉位。 院中可真熱鬧,春花似錦菜枷、人聲如沸苍糠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岳瞭。三九已至,卻和暖如春蚊锹,著一層夾襖步出監(jiān)牢的瞬間瞳筏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工牡昆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姚炕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓迁杨,卻偏偏與公主長得像钻心,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铅协,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容