日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

微信支付服务器端php,APP微信支付php服务端函数方法

發(fā)布時間:2024/3/13 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信支付服务器端php,APP微信支付php服务端函数方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

namespace wxPay\Controller;

use Think\Controller;

class AjaxpayfunController extends Controller {

function index(){

header('Content-Type:text/html;Charset=utf-8'); //php頁面輸出 亂碼

//參數(shù)配置

$appid = '*********'; /*微信開放平臺上的應用id*/

$mch_id = '*************'; /*微信申請成功之后郵件中的商戶id*/

$api_key = '************************'; /*在微信商戶平臺上自己設定的api密鑰 32位*/

$out_trade_no = $this -> ordersinfo(); /*商戶訂單號*/

$price = $_GET['total']*1; /*支付金額*/

$price = 0.02*1; /*支付金額*/

$code = $this -> weChatPay($out_trade_no,$price,$appid,$mch_id,$api_key);

echo($code);

}

//入口函數(shù)

function weChatPay($order_num,$price,$appid,$mch_id,$api_key){

$json = array();//生成預支付交易單的必選參數(shù):

$newPara = array();//所需各項參數(shù)

$newPara["appid"] = $appid; //應用APP appid

$newPara["mch_id"] = $mch_id; //微信支付商戶id//設備號

$newPara["device_info"] = $this -> createNoncestr(); //終端設備號(門店號或收銀設備ID),如沒有這里推薦使用函數(shù)生成隨機字符串

$newPara["nonce_str"] = $this -> createNoncestr(); //隨機字符串,不長于32位。推薦隨機數(shù)生成算法

$newPara["body"] = "添美愛車"; //商品描述 或應用名稱

$newPara["out_trade_no"] = $order_num; //商戶訂單號,這里是商戶自己的內(nèi)部的訂單號

$newPara["total_fee"] = $price*100; //支付金額

$newPara["spbill_create_ip"] = $_SERVER["REMOTE_ADDR"]; //正在瀏覽當前頁面用戶的 IP 地址。

$newPara["notify_url"] = "http://**********/wxpay.php/Ajaxpayfun/wxpaynotify_url_sqlsta"; //支付成功后的回調(diào)地址注意,這里的url里面不要加參數(shù)

$newPara["trade_type"] = "APP"; //交易類型

$key = $api_key;// 密鑰:在商戶后臺個人安全中心設置//第一次簽名

$newPara["sign"] = $this -> appgetSign($newPara,$key);

//把數(shù)組轉(zhuǎn)化成xml格式

$xmlData = $this -> arrayToXml($newPara);

$get_data = $this -> sendPrePayCurl($xmlData);

//返回的結(jié)果進行判斷。

if($get_data["return_code"] == "SUCCESS" && $get_data["result_code"] == "SUCCESS"){

//根據(jù)微信支付返回的結(jié)果進行二次簽名

//二次簽名所需的隨機字符串

$newPara["nonce_str"] = $this -> createNoncestr(); //二次簽名所需的時間戳

$newPara["timeStamp"] = time().""; //二次簽名剩余參數(shù)的補充

$secondSignArray = array(

"appid" =>$newPara["appid"],

"noncestr" =>$newPara["nonce_str"],

"package" =>"Sign=WXPay",

"prepayid" =>$get_data["prepay_id"],

"partnerid" =>$newPara["mch_id"],

"timestamp" =>$newPara["timeStamp"],);

$json["success"] = 1;

$json["ordersn"] = $newPara["out_trade_no"]; //訂單號

$json["order_arr"] = $secondSignArray; //返給前臺APP的預支付訂單信息

$json["order_arr"]["sign"] = $this -> appgetSign($secondSignArray,$key); //預支付訂單簽名

$json["order_arr"]["out_trade_no"] = $newPara["out_trade_no"]; //商戶訂單號

$json["data"] = "預支付完成"; //預支付完成,在下方進行自己內(nèi)部的業(yè)務邏輯

return json_encode($json["order_arr"]);

}else{

$json["success"] = 0;

$json["error"] =

$get_data["return_msg"];

return json_encode($json);

}

}

//商品訂單號碼生成方法可自定義

function ordersinfo(){

$shop = "TIANMEIAIC";

$date = date("YmdHi");

$time = time();

$out_trade_no = $shop.$date.$time;

return $out_trade_no;

}

//將數(shù)組轉(zhuǎn)換為xml格式

function arrayToXml($arr){

$xml = "";

foreach ($arr as $key=>$val){

if (is_numeric($val)){

$xml.="".$val."".$key.">";

}else{

$xml.="".$key.">";

}

}

$xml.="";

return $xml;

}

//發(fā)送請求

function sendPrePayCurl($xml,$second=30){

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//設置header

curl_setopt($ch, CURLOPT_HEADER, FALSE);//果為字符串且輸出到屏幕上

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//post提交方式

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//運行curl

$data = curl_exec($ch);

curl_close($ch);

$data_xml_arr =$this -> XMLDataParse($data);

if($data_xml_arr){

return $data_xml_arr;

}else{

$error = curl_errno($ch);

echo"curl出錯,錯誤碼:$error"."
";

echo "錯誤原因查詢";

curl_close($ch);

return false;

}

}

//xml格式數(shù)據(jù)解析函數(shù)

function XMLDataParse($data){

$xml = simplexml_load_string($data,NULL,LIBXML_NOCDATA);

$array=json_decode(json_encode($xml),true);

return $array;

}

//隨機字符串

function createNoncestr( $length = 32 ){

$chars = "abcdefghijklmnopqrstuvwxyz0123456789";

$str ="";

for($i = 0; $i < $length;$i++){

$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);

}return $str;

}

/*格式化參數(shù)格式化成url參數(shù) 生成簽名sign*/

function appgetSign($Obj,$appwxpay_key){

foreach ($Obj as $k => $v){

$Parameters[$k] = $v;

}

//簽名步驟一:按字典序排序參數(shù)

ksort($Parameters);

$String = $this -> formatBizQueryParaMap($Parameters, false);

//echo "【string1】".$String."";

//簽名步驟二:在string后加入KEY

if($appwxpay_key){

$String = $String."&key=".$appwxpay_key;

}

//echo "【string2】".$String."";

//簽名步驟三:MD5加密

$String = md5($String);

//echo "【string3】 ".$String."";

//簽名步驟四:所有字符轉(zhuǎn)為大寫

$result_ = strtoupper($String);

//echo "【result】 ".$result_."";

return $result_;

}

//按字典序排序參數(shù)

function formatBizQueryParaMap($paraMap, $urlencode) {

$buff = "";

ksort($paraMap);

foreach ($paraMap as $k => $v){

if($urlencode){

$v = urlencode($v);

}

//$buff .= strtolower($k) . "=" . $v . "&";

$buff .= $k . "=" . $v . "&";}

$reqPar;if (strlen($buff) > 0){

$reqPar = substr($buff, 0, strlen($buff)-1);

}

return $reqPar;

}

//微信支付成功后回調(diào)方法

public function wxpaynotify_url_sqlsta(){

$testxml = file_get_contents("php://input");

$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));

$result = json_decode($jsonxml, true);//轉(zhuǎn)成數(shù)組,

if($result){

//如果成功返回了

$out_trade_no = $result['out_trade_no'];

$transaction_id = $result['transaction_id'];

if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){

//執(zhí)行業(yè)務邏輯改變訂單狀態(tài)等操作

$orderssave = $this -> orderssqlstasave($out_trade_no,$transaction_id);

}

}

}

//數(shù)據(jù)庫訂單數(shù)據(jù)修改方法

public function orderssqlstasave($out_trade_no,$transaction_id){

//查詢創(chuàng)建訂單表 where("out_trade_no='".$out_trade_no."' and paysta=1")

$where['paysta'] = 1;

$where['out_trade_no'] = $out_trade_no;

$list = M("orders") -> where($where) -> find();

if ($list && $list['transaction_id'] == '') {

$data['id'] = $list['id'];

$data['transaction_id'] = $transaction_id;

//查詢出來有該訂單 就改變狀態(tài)

$save = M("orders") -> save($data);

if ($save) {

return $save;

}

}

}

}

總結(jié)

以上是生活随笔為你收集整理的微信支付服务器端php,APP微信支付php服务端函数方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。