PHP微信APP支払い(TP 5)

4412 ワード

PHP交流群:294088839
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、