以下用到的类库来自:微信支付
1、订单生成并成功入库后,后端去微信生成订单:
//微信下单
$input = new WxPayUnifiedOrder();
$input->SetBody($body); //设置商品或支付单简要描述
$input->SetAttach(''); //设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据
$input->SetOut_trade_no($order_sn); //设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
$input->SetTotal_fee($price); //设置订单总金额,只能为整数,详见支付金额
$input->SetTime_start(date("YmdHis")); //设置订单生成时间,格式为yyyyMMddHHmmss
$input->SetTime_expire(date("YmdHis", time() + 60*10)); //设置订单失效时间,格式为yyyyMMddHHmmss
$input->SetGoods_tag("tag"); //设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠
$input->SetNotify_url($notify_url); //设置接收微信支付异步通知回调地址
$input->SetTrade_type("APP"); //设置类型如下:JSAPI,NATIVE,APP
$order_data = WxPayApi::unifiedOrder($input); //统一下单
PS:$order_data 为微信返回的订单生成结果。
@param: appid
@param: mch_id
@param: nonce_str
@param: prepay_id
@param: result_code
@param: return_code
@param: return_msg
@param: sign (签名,此时返回的签名不能给APP端调用,需要重新生成签名)
@param: trade_type
结果数据中:prepay_id 数据最重要。
2、将微信返回的prepay_id数据再次签名,再返回给APP端
获取到 prepay_id 后,将参数 appid、noncestr、package(注意:此处应置为 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数据返回给APP端调用
echo json_encode($order_data);