PHP 접속 위 챗 스 캔 결제 총괄(총괄 편)






위 챗 스 캔 결 제 는 두 가지 모델 로 나 뉜 다.
패턴 이 비교적 복잡 하기 때문에 공중전화 로 주 소 를 바 꿔 야 한다.
모드 2 는 비교적 간단 합 니 다.코드 에 리 셋 주 소 를 설정 하면 됩 니 다.
내 가 이번에 사용 한 것 은 모드 2 다.
매개 변 수 를 설정 해 야 합 니 다.

const APPID = 'xxx';
const MCHID = 'xxx';
const KEY = 'xxx';
const APPSECRET = 'xxx';
공중 번호 의 appid,appsicret 를 설정 합 니 다.그리고 위 챗 결제 mchid 와 key.
QR 코드 를 만 들 려 면 이 페이지 는 알 리 페 이 처럼 자체 적 으로 효 과 를 내지 않 고 스스로 미화 해 야 한다.

require_once "./phpcms/plugin/weixinpay/lib/WxPay.Api.php";
require_once "./phpcms/plugin/weixinpay/example/WxPay.NativePay.php";
require_once './phpcms/plugin/weixinpay/example/log.php';
$input = new WxPayUnifiedOrder();
$input->SetBody('  '.$product_info['name'].'  ');
$input->SetAttach('  '.$product_info['name'].'  ');
$input->SetOut_trade_no($order_info['orderno']);
$input->SetTotal_fee($order_info['payprice'] * 100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("");
$input->SetNotify_url("http://www.ayuanduanzu.com/wxpay/notify.php"); //          ,       
$input->SetTrade_type("NATIVE");
$input->SetProduct_id($product_info['id']);
$notify = new NativePay();
$result = $notify->GetPayUrl($input);
$code_url = $result["code_url"];
<img alt="    " src="http://paysdk.weixin.qq.com/example/qrcode.php?data={urlencode($code_url)}" style="width:150px;height:150px;"/>
이곳 의 리 셋 주 소 는 매우 중요 하 다.스 캔 결제 가 성공 하면 위 챗 은 자동 으로 이 주 소 를 호출 할 것 이다.이 주 소 는 어떠한 인자 도 포함 할 수 없습니다.그렇지 않 으 면 호출 에 실 패 했 습 니 다.아무것도 안 보 여!
위 챗 이 호출 될 때 xml 형식의 인 자 를 전달 합 니 다.

include_once "../phpcms/base.php";
//       
error_reporting(E_ERROR);
require_once "../phpcms/plugin/weixinpay/lib/WxPay.Api.php";
require_once '../phpcms/plugin/weixinpay/lib/WxPay.Notify.php';
require_once '../phpcms/plugin/weixinpay/example/log.php';
//     
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);
class PayNotifyCallBack extends WxPayNotify
//    
public function Queryorder($transaction_id)
{
$input = new WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = WxPayApi::orderQuery($input);
Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
return false;
}
//        
public function NotifyProcess($data, &$msg)
{
Log::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array();
if(!array_key_exists("transaction_id", $data)){
$msg = "       ";
return false;
}
//    ,       
if(!$this->Queryorder($data["transaction_id"])){
$msg = "      ";
return false;
}
return true;
}
Log::DEBUG("begin notify");
$notify = new PayNotifyCallBack();
$ilog_db = pc_base::load_model('ilog_model');
$order_db = pc_base::load_model('order_model');
$postXml = $GLOBALS["HTTP_RAW_POST_DATA"];
$postArr = xmlToArray($postXml);
//         
$r = $notify->Queryorder($postArr['transaction_id']);
if ($r) {
//       
$order_info = $order_db->get_one(array('orderno'=>$postArr['out_trade_no']));
if ($order_info['pay_status'] != '1') {
$data['pay_status'] = '1';
$data['pay_type'] = 'weixinpay';
$data['pay_code'] = $postArr['transaction_id'];
$data['paytime'] = time();
$data['order_status']= 3; //    
$order_db->update($data,array('orderno'=>$postArr['out_trade_no']));
}
?>
통과 하 다.

$GLOBALS["HTTP_RAW_POST_DATA"];
위 챗 에서 들 어 오 는 인 자 를 가 져 올 수 있 습 니 다.

{
"appid": "wxed7996e9ad58345d",
"attach": "u9884u8ba2u5bbfu8fc1u00b7u592au53e4u91ccu7f8eu5f0fu5957u623fu8ba2u5355",
"bank_type": "CFT",
"cash_fee": "1",
"fee_type": "CNY",
"is_subscribe": "Y",
"mch_id": "1283301801",
"nonce_str": "20xn5e0lbk2u1u6pes2uonape2sdyfs4",
"openid": "oR8C7wsknwVELIRrzTlZX2eONWeY",
"out_trade_no": "2016091455521024608",
"result_code": "SUCCESS",
"return_code": "SUCCESS",
"sign": "95C2C532D095E7BF7588522C579758C4",
"time_end": "20160914135518",
"total_fee": "1",
"trade_type": "NATIVE",
"transaction_id": "4009602001201609143926590576"
}
지불 여 부 를 조회 하고 지불 이 완료 되면 주문 데이터 처 리 를 진행 합 니 다.
이곳 의 모든 것 은 비동기 적 이어서 QR 코드 페이지 는 아무것도 볼 수 없다.
비동기 적 으로 주문 상 태 를 가 져 와 서 조작 성공 여 부 를 판단 할 수 있 습 니 다.

//         
$(document).ready(function () {
setInterval("ajaxstatus()", 3000); 

function ajaxstatus() {
var orderno = $("#out_trade_no").val();
if (orderno != 0) {
$.ajax({
url: "?m=home&c=order&a=ajax",
type: "GET",
dataType:"json",
data: {
todo: 'ajaxCheckWxPay',
orderno: orderno,
},
success: function (json) {
if (json.status == 1) { //     1      
layer.msg('    ',{icon:1,time: 2000},function(){
window.location.href = "?m=home&c=order&a=payDone&orderno="+json.info['orderno'];
});
// window.location.href = "wxScanSuccessUrl.action"; //    
}
}
});
}
}
3 초 에 한 번 실행 하고 성공 하면 점프 처 리 를 합 니 다.
증정 함수

*   :array xml
*/
function arrayToXml($arr)
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">"; 
}
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; 
}
$xml.="</xml>";
return $xml; 

*   : xml  array
*/
function xmlToArray($xml)
{ 
// XML  array 
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); 
return $array_data;
}
팁 을 증정 하 다
비동기 호출 에 효과 가 보이 지 않 으 면.로그 표를 만들어 서 작업 한 데 이 터 를 표 에 기록 할 수 있 습 니 다.테스트 에 편리 하 다.지불 리 턴 은 모두 비동기 적 이 며 로그 시트 의 데 이 터 를 통 해 지불 성공 여 부 를 판단 할 수 있 습 니 다.리 턴 이 호출 되 었 는 지,몇 번 호출 되 었 는 지 여 부 를 판단 할 수 있 습 니 다.
소결:
위 챗 스 캔 결 제 는 알 리 페 이 스 스 캔 결제 보다 편리 합 니 다.스스로 많은 처 리 를 해 야 한다.
위 에서 말 한 것 은 여러분 에 게 소개 한 PHP 위 챗 스 캔 결제 접속 총화(총 결 편)입 니 다.데이터 베 이 스 는 공백 을 나타 내 는 완벽 한 해결 방안(그림 과 글 교정)입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.작은 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기