小程序端:
<button bindtap=\'checkout\' style=\'margin-top:20px\'>微信支付</button> checkout: function () { var that = this; wx.login({ success: function (res) { if (res.code) { //发起网络请求 wx.request({ url: app.globalData.requestUrl_pay, data: { code: res.code }, header: { \'Content-Type\': \'application/x-www-form-urlencoded\' }, method: "POST", success: function (res) { //console.log(res) that.sendpay(res.data) } }) } else { console.log(\'获取用户登录态失败!\' + res.errMsg) } } }); }, sendpay: function (res) { console.log(res) wx.requestPayment( { \'timeStamp\': res.timeStamp, \'nonceStr\': res.nonceStr, \'package\': res.package, \'signType\': \'MD5\', \'paySign\': res.paySign, \'success\': function (res) { console.log(\'success\')}, \'fail\': function (res) { console.log(\'fail\')}, \'complete\': function (res) { console.log(\'complete\')} }) },
ini_set(\'date.timezone\',\'Asia/Shanghai\'); require_once "pay/WxPay.Api.php"; require_once "pay/WxPay.JsApiPay.php"; define("APPID", \'xxx\'); define("SECRET", \'xxx\'); $code = $_REQUEST[\'code\']; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=".APPID."&secret=".SECRET."&js_code=".$code."&grant_type=authorization_code"; $res = curlget($url); $res = json_decode($res,true); $input = new WxPayUnifiedOrder(); $input->SetBody("test"); $input->SetAttach("test"); $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); $input->SetTotal_fee("1"); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag("test"); $input->SetNotify_url("http://www.xxx.com/xxx.php"); $input->SetTrade_type("JSAPI"); $input->SetOpenid($res[\'openid\']); $order = WxPayApi::unifiedOrder($input); $timeStamp = (string)time(); $sign[\'appId\'] = $order[\'appid\']; $sign[\'timeStamp\'] = $timeStamp; $sign[\'nonceStr\'] = $order[\'nonce_str\']; $sign[\'package\'] = \'prepay_id=\'.$order[\'prepay_id\']; $sign[\'signType\'] = \'MD5\'; ksort($sign); $buff = ""; foreach ($sign as $k => $v) { if($k != "sign" && $v != "" && !is_array($v)){ $buff .= $k . "=" . $v . "&"; } } $buff = trim($buff, "&"); $string = $buff . "&key=".WxPayConfig::KEY; $string = md5($string); $paySign = strtoupper($string); $res = array( \'timeStamp\' =>$timeStamp, \'nonceStr\' =>$order[\'nonce_str\'], \'package\' =>\'prepay_id=\'.$order[\'prepay_id\'], \'signType\' =>\'MD5\', \'paySign\' =>$paySign ); echo json_encode($res);
function curlget($url=\'\'){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}
返回数据:
<xml> <appid><![CDATA[dfdf]]></appid> <attach><![CDATA[fdf]]></attach> <bank_type><![CDATA[CFT]]></bank_type> <cash_fee><![CDATA[1]]></cash_fee> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[N]]></is_subscribe> <mch_id><![CDATA[]]></mch_id> <nonce_str><![CDATA[dfdfdfdf]]></nonce_str> <openid><![CDATA[o6tz-dfdfdf]]></openid> <out_trade_no><![CDATA[ddfffdfdf]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[dfdfdf]]></sign> <time_end><![CDATA[dfdfdfdf]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[dfdfdfd]]></transaction_id> </xml>