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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】

發(fā)布時間:2024/4/18 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文實例講述了PHP實現(xiàn)的微信APP支付功能。分享給大家供大家參考,具體如下:

1.進行支付請求 他給的DEMO 用的時候有時候會報錯

1)我遇到的情況 把? WxPay.Api.php這個文件的 postXmlCurl 這個 方法里

// curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

// curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴格校驗

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);

這兩行的嚴格驗證給注掉

2)有時候還會報終端IP錯誤? 我的修改方案是 要么寫死 要么注掉 他不是必填參數(shù)

3)有時候還會報寫入 日志文件 包含錯誤? 把他的相對路徑改成絕對路徑就好了

4)以下就是APP請求參數(shù)

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

require_once "./payment/wxpay/php/example/WxPay.NativePay.php";

$notify = new \NativePay();

$input = new \WxPayUnifiedOrder();

$input->SetBody("購買訂單");

$input->SetOut_trade_no($order_data['order_number']);

$input->SetTotal_fee($zongMoney*100);

$input->SetNonce_str($this->createNoncestr());

$input->SetNotify_url(config('u_wx_notify_url'));

$input->SetTrade_type('APP');

$input->SetProduct_id(rand(10000,99999));

$result = $notify->GetPayUrl($input);

//我還遇到了 $result 返回值為空 也不報錯

// 然后我發(fā)現(xiàn)是因為我用的請求方法為 GetPayUrl()

// 這個方法是掃碼支付請求的方法 方法里有個判斷

$input->GetTrade_type() == "NATIVE"

//這個NATIVE 是掃碼支付的類型

// 我就在這個方法里的if判斷又加了一個if判斷

$input->GetTrade_type() == "APP"

//如果他等于APP的時候就讓他再次發(fā)下請求 這樣就可以得到參數(shù)了

$prepay_id = $result["prepay_id"];

//他所范圍的參數(shù)最重要的為 prepay_id 需要再進行參數(shù)加密 進入 getOrder()進行加密

$response = $this->getOrder($prepay_id);

// correctStatus 此函數(shù)是我自定義的 跟APP對接的 json 數(shù)據(jù) 根據(jù)自己的實際情況 定義

$json = correctStatus($response);

//最后輸出給 APP 就好了

echo $json;

//執(zhí)行第二次簽名,才能返回給客戶端使用

public function getOrder($prepayId){

$pay=\think\Db::name('pay_type')->where(['pay_id'=>2])->field('pay_json')->find();

$wx=json_decode($pay['pay_json'],true);

$data["appid"] = $wx['web_appid'];

//createNoncestr 獲取隨機字符串 他寫的demo里有方法 不過你也可以自定義

$data["noncestr"] = $this->createNoncestr();

$data["package"] = "Sign=WXPay";

$data["partnerid"] = $wx['web_mch_id'];

$data["prepayid"] = $prepayId;

$data["timestamp"] = time();

// 加密方法 getSign() 同樣的 在他的demo 里也有方法 這些方法都再 WxPay.Data.php 這個文件里

$s = $this->getSign($data,$wx['web_key']);

$data["sign"] = $s;

return $data;

}

//那些 appid key 什么的參數(shù)配置 我是直接在他的 WxPay.Config.php這個文件里寫了個構(gòu)造方法 直接賦值

private $appid;

private $mch_id;

private $key;

private $appsecret;

public function __construct()

{

$pay=\think\Db::name('pay_type')->where(['pay_id'=>2])->field('pay_json')->find();

$wx=json_decode($pay['pay_json'],true);

$this->appid=$wx['web_appid'];

$this->mch_id=$wx['web_mch_id'];

$this->key=$wx['web_key'];

$this->appsecret=$wx['web_appsecret'];

}

2.微信回調(diào)地址的處理

//因為我 在WxPay.Config.php文件里已經(jīng)賦值給了 appid 所以 這邊 new 一下 就會獲取所有的配置參數(shù)

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

require_once './payment/wxpay/php/lib/WxPay.Notify.php';

require_once './payment/wxpay/php/lib/WxPay.Data.php';

require_once "./payment/wxpay/php/example/WxPay.Config.php";

$config = new \WxPayConfig();

$notify = new \WxPayNotify();

$notify->Handle($config, false);

//存儲微信的回調(diào)

$objData = $GLOBALS['HTTP_RAW_POST_DATA'];

//自定義日志 函數(shù)

log_result("【接收到的notify通知】:\n".$objData."\n");

$data=\WxPayResults::Init($config,$objData);

// $data = $objData->GetValues();

//TODO 1、進行參數(shù)校驗

if(!array_key_exists("return_code", $data) || (array_key_exists("return_code", $data) && $data['return_code'] != "SUCCESS")) {

//TODO失敗,不是支付成功的通知

//如果有需要可以做失敗時候的一些清理處理,并且做一些監(jiān)控

$msg = "異常異常";

log_result("【接收到的notify通知】:\n".$msg."\n");

return false;

}

if(!array_key_exists("transaction_id", $data)){

$msg = "輸入?yún)?shù)不正確";

log_result("【接收到的notify通知】:\n".$msg."\n");

return false;

}

//這里可以多一步 參數(shù) 具體情況 自己定

//TODO 2、處理業(yè)務(wù)邏輯

以下就可以寫 業(yè)余邏輯了

希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。

總結(jié)

以上是生活随笔為你收集整理的php tp 微信支付,PHP实现的微信APP支付功能示例【基于TP5框架】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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