PHP微信APP支払い(TP 5)
4412 ワード
PHP交流群:294088839
1.支払い請求をしたDEMOを使っているときに誤報をすることがあります
1).私が遭遇した状況はWxPay.Api.phpというファイルのpostXmlCurlという方法では
この2行の厳格な検証は注記されている.
2).時には端末IPエラーも報告します.私の修正案は死ぬか、パラメータを記入する必要はありません.
3)書き込みログファイルにエラーが含まれていることを報告したり、相対パスを絶対パスに変更すればよい
4)以下がAPP要求パラメータ
//appid keyとかのパラメータ構成は彼のWxPayに直接あります.Config.phpこのファイルには構造方法を書いて直接値をつけた.
2.微信コールバックアドレスの処理
//WxPayにいるからConfig.phpファイルにはappidが割り当てられているので、こちらnewではすべての構成パラメータを取得します.
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行の厳格な検証は注記されている.
2).時には端末IPエラーも報告します.私の修正案は死ぬか、パラメータを記入する必要はありません.
3)書き込みログファイルにエラーが含まれていることを報告したり、相対パスを絶対パスに変更すればよい
4)以下がAPP要求パラメータ
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
// GetPayUrl()
//
$input->GetTrade_type() == "NATIVE"
// NATIVE
// if if
$input->GetTrade_type() == "APP"
// APP
$prepay_id = $result["prepay_id"];
// prepay_id getOrder()
$response = $this->getOrder($prepay_id);
// correctStatus APP json
$json = correctStatus($response);
// APP
echo $json;
// ,
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とかのパラメータ構成は彼のWxPayに直接あります.Config.phpこのファイルには構造方法を書いて直接値をつけた.
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.微信コールバックアドレスの処理
//WxPayにいるからConfig.phpファイルにはappidが割り当てられているので、こちらnewではすべての構成パラメータを取得します.
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);
//
$objData = $GLOBALS['HTTP_RAW_POST_DATA'];
//
log_result("【 notify 】:
".$objData."
");
$data=\WxPayResults::Init($config,$objData);
// $data = $objData->GetValues();
//TODO 1、
if(!array_key_exists("return_code", $data) || (array_key_exists("return_code", $data) && $data['return_code'] != "SUCCESS")) {
//TODO ,
// ,
$msg = " ";
log_result("【 notify 】:
".$msg."
");
return false;
}
if(!array_key_exists("transaction_id", $data)){
$msg = " ";
log_result("【 notify 】:
".$msg."
");
return false;
}
//
//TODO 2、