1. 程式人生 > >PHP實現微信支付(jsapi支付)和退款(無需整合支付SDK

PHP實現微信支付(jsapi支付)和退款(無需整合支付SDK

1.PHP實現微信支付(jsapi支付)流程 2.ThinkPHP中實現微信支付(jsapi支付)流程 3.PHP實現微信申請退款 這幾篇都是使用了微信官方給的PHP版本的SDK,進行支付的時候寫程式碼可以省不少事,步驟也挺簡化,但是整合SDK有很多坑,很多人說引入的SDK老報錯,或者說官方SDK本身有不少錯誤,改起來很麻煩,也確實挺麻煩的,對於新手搞支付很容易被繞進去,那麼今天就來講講不整合支付SDK直接呼叫支付介面實現支付和退款。

前期準備: 1.當然了,還是要有一個微信認證服務號,並且開通了微信支付; 2.在微信商戶後臺配置好支付授權目錄,同時準備好支付的Api證書(支付用不到,退款的時候使用) 3.呼叫介面支付的話,必須要先知道該使用者的openid,所以要先知道怎麼獲取使用者的openid,這個也很簡單,我之前也有文章講怎麼獲取使用者的openid,詳見文章微信公眾號獲取使用者的openid。

好了,話不多說,直接貼上主要程式碼: /**

  • 微信支付請求介面(POST)

  • @param string $openid openid

  • @param string $body 商品簡單描述

  • @param string $order_sn 訂單編號

  • @param string $total_fee 金額

  • @return json的資料 */ public function wxpay(openid,openid,total_fee,body,body,order_sn){ $config = $this->config;

    //統一下單引數構造 $unifiedorder = array( ‘appid’ => $config[‘appid’], ‘mch_id’ => $config[‘mch_id’], ‘nonce_str’ => self::getNonceStr(), ‘body’ => $body, ‘out_trade_no’ => $order_sn, ‘total_fee’ => t

    otalfee100,spbillcreateip=>self::getip(),notifyurl=>http://.total_fee * 100, 'spbill_create_ip' => self::getip(), 'notify_url' => 'http://'._SERVER[‘HTTP_HOST’].’/notify.php’, ‘trade_type’ => ‘JSAPI’, ‘openid’ => $openid ); u
    nifiedorder[sign]=self::makeSign(unifiedorder['sign'] = self::makeSign(
    unifiedorder);

    //return $unifiedorder;

    //請求資料,統一下單 xmldata=self::array2xml(xmldata = self::array2xml(unifiedorder); $url = ‘https://api.mch.weixin.qq.com/pay/unifiedorder’; res=self::curlpostssl(res = self::curl_post_ssl(url, xmldata);if(!xmldata); if(!res){ return array(‘status’=>0, ‘msg’=>“Can’t connect the server” ); } // 這句file_put_contents是用來檢視伺服器返回的結果 測試完可以刪除了 //file_put_contents(’./log.txt’,$res,FILE_APPEND);

    content=self::xml2array(content = self::xml2array(res); if(strval(KaTeX parse error: Expected '}', got 'EOF' at end of input: … 'msg'=>strval(content[‘err_code’]).’:’.strval(KaTeX parse error: Expected 'EOF', got '}' at position 29: …code_des'])); }̲ if(strval(content[‘return_code’]) == ‘FAIL’){ return array(‘status’=>0, ‘msg’=>strval($content[‘return_msg’])); }

    time=time();settype(time = time(); settype(time, “string”); //jsapi支付介面,時間戳必須為字串格式 resdata=array(appId=>strval(resdata = array( 'appId' => strval(content[‘appid’]), ‘nonceStr’ => strval(content[noncestr]),package=>prepayid=.strval(content['nonce_str']), 'package' => 'prepay_id='.strval(content[‘prepay_id’]), ‘signType’ => ‘MD5’, ‘timeStamp’ => $time ); resdata[paySign]=self::makeSign(resdata['paySign'] = self::makeSign(resdata);

    return json_encode($resdata); }

/**

  • 微信退款(POST)

  • @param string(28) $transaction_id 在微信支付的時候,微信伺服器生成的訂單流水號,在支付通知中有返回

  • @param string $out_refund_no 商品簡單描述

  • @param string $total_fee 微信支付的時候支付的總金額(單位:分)

  • @param string $refund_fee 此次要退款金額(單位:分)

  • @return string xml格式的資料 */ public function refund(transactionid,transaction_id,out_refund_no,totalfee,total_fee,refund_fee){ $config = $this->config;

    //退款引數 $refundorder = array( ‘appid’ => $config[‘appid’], ‘mch_id’ => $config[‘mch_id’], ‘nonce_str’ => self::getNonceStr(), ‘transaction_id’=> $transaction_id, ‘out_refund_no’ => $out_refund_no, ‘total_fee’ => $total_fee * 100, ‘refund_fee’ => $refund_fee * 100 ); refundorder[sign]=self::makeSign(refundorder['sign'] = self::makeSign(refundorder);

    //請求資料,進行退款 xmldata=self::array2xml(xmldata = self::array2xml(refundorder); $url = ‘https://api.mch.weixin.qq.com/secapi/pay/refund’; res=self::curlpostssl(res = self::curl_post_ssl(url, xmldata);if(!xmldata); if(!res){ return array(‘status’=>0, ‘msg’=>“Can’t connect the server” ); } // 這句file_put_contents是用來檢視伺服器返回的結果 測試完可以刪除了 //file_put_contents(’./log3.txt’,$res,FILE_APPEND);

    content=self::xml2array(content = self::xml2array(res); if(strval(KaTeX parse error: Expected '}', got 'EOF' at end of input: … 'msg'=>strval(content[‘err_code’]).’:’.strval(KaTeX parse error: Expected 'EOF', got '}' at position 29: …code_des'])); }̲ if(strval(content[‘return_code’]) == ‘FAIL’){ return array(‘status’=>0, ‘msg’=>strval($content[‘return_msg’])); }

    return $content; } 這是封裝好的類,使用起來也超級簡單:

<?php require_once "wxpay.class.php"; $config = array( 'wxappid' => 'wx123456789876', 'mch_id' => '123456789', 'pay_apikey' => '123456789876123456789876123456789876' ); $wxpay = new WxPay($config); $result = $wxpay->paytest(); ?> 江南極客支付 該筆訂單支付金額為1分 1分錢也是愛 果斷買買買^_^ 至於支付回撥驗證,這裡就不過多講了,不明白的可以看ThinkPHP中實現微信支付(jsapi支付)流程,這裡詳細講了如何處理回撥。 類檔案以及使用例項程式碼原始碼下載:http://download.csdn.net/download/sinat_35861727/9957810 如果真的感覺好用,可以聯絡上海捌躍網路科技有限公司,QQ 3343874032