以下用到的類庫來自:微信支付
1够滑、訂單生成并成功入庫后,后端去微信生成訂單:
//微信下單
$input = new WxPayUnifiedOrder();
$input->SetBody($body); //設(shè)置商品或支付單簡要描述
$input->SetAttach(''); //設(shè)置附加數(shù)據(jù)丈积,在查詢API和支付通知中原樣返回态蒂,該字段主要用于商戶攜帶訂單的自定義數(shù)據(jù)
$input->SetOut_trade_no($order_sn); //設(shè)置商戶系統(tǒng)內(nèi)部的訂單號,32個(gè)字符內(nèi)、可包含字母, 其他說明見商戶訂單號
$input->SetTotal_fee($price); //設(shè)置訂單總金額娘汞,只能為整數(shù)漫仆,詳見支付金額
$input->SetTime_start(date("YmdHis")); //設(shè)置訂單生成時(shí)間,格式為yyyyMMddHHmmss
$input->SetTime_expire(date("YmdHis", time() + 60*10)); //設(shè)置訂單失效時(shí)間坤按,格式為yyyyMMddHHmmss
$input->SetGoods_tag("tag"); //設(shè)置商品標(biāo)記毯欣,代金券或立減優(yōu)惠功能的參數(shù),說明詳見代金券或立減優(yōu)惠
$input->SetNotify_url($notify_url); //設(shè)置接收微信支付異步通知回調(diào)地址
$input->SetTrade_type("APP"); //設(shè)置類型如下:JSAPI臭脓,NATIVE酗钞,APP
$order_data = WxPayApi::unifiedOrder($input); //統(tǒng)一下單
PS:$order_data 為微信返回的訂單生成結(jié)果。
@param: appid
@param: mch_id
@param: nonce_str
@param: prepay_id
@param: result_code
@param: return_code
@param: return_msg
@param: sign (簽名,此時(shí)返回的簽名不能給APP端調(diào)用,需要重新生成簽名)
@param: trade_type
結(jié)果數(shù)據(jù)中:prepay_id 數(shù)據(jù)最重要。
2砚作、將微信返回的prepay_id數(shù)據(jù)再次簽名,再返回給APP端
獲取到 prepay_id 后,將參數(shù) appid窘奏、noncestr、package(注意:此處應(yīng)置為 Sign=WXPay)葫录、partnerid着裹、prepayid、timestamp 簽名后返回給 APP米同。
$order_data['timestamp'] = time();
$str = 'appid='.$order_data['appid'].'&noncestr='.$order_data['nonce_str'].'&package=Sign=WXPay&partnerid='.WxPayConfig::MCHID.'&prepayid='.$order_data['prepay_id'].'×tamp='.$order_data['timestamp'];
//重新生成簽名
$order_data['sign'] = strtoupper(md5($str.'&key='.WxPayConfig::KEY));
//將$order_data數(shù)據(jù)返回給APP端調(diào)用
echo json_encode($order_data);