应该用公众号支付里的公众 号内H5支付
public function h5_pay($pay_sn){
header("Content-Type: text/html;charset=utf-8");
$param['appId'] = $this->payment_config['wxpay']['payment_config']['wxpay_appid'];
$param['timeStamp'] =strval(time());
$param['nonceStr'] = md5(rand());
$prepay_id = $this->_get_wx_pay($pay_sn,'wxpay'); //统一下单
$param['package'] ="prepay_id=".$prepay_id; //统一下单生成的
$param['signType'] ="MD5";
$paySign = $this->_get_wx_pay_sign3($param,'wxpay'); //签名
$param['paySign'] =$paySign;
return $param;
}
//统一下单
public function _get_wx_pay($pay_sn,$payment_code) {
$openid = Model()->table('member')->field('openid')->where(array('member_id'=>$_SESSION['userid']))->find()['openid'];
if(!$openid){
$openid =$_COOKIE['openid'];
}
$noncestr = md5(rand());
$param = array();
$param['appid'] = $this->payment_config['wxpay']['payment_config']['wxpay_appid'];
$param['mch_id'] = $this->payment_config['wxpay']['payment_config']['wxpay_partnerid'];
$param['openid'] = $openid;
$param['nonce_str'] = $noncestr;
$param['body'] = '微信-H5支付';
$param['out_trade_no'] = $pay_sn;
$param['total_fee'] = 1;
$param['spbill_create_ip'] = get_server_ip(); //用户ip
$param['notify_url'] = BASE_SITE_URL . '/app/api/payment/wxpay_app/notify_url_order.php';
$param['trade_type'] = 'JSAPI';
$sign = $this->_get_wx_pay_sign3($param,'wxpay');
//var_dump($sign);exit;
$param['sign'] = $sign;
//var_dump($sign);exit;
$post_data =$this->arrayToXml($param);
//var_dump($post_data);exit;
$prepay_result = http_postdata('https://api.mch.weixin.qq.com/pay/unifiedorder', $post_data);
$result = $this->xmlToArray($prepay_result);
return $result['prepay_id'];
}
private function _get_wx_pay_sign3($param,$payment_code) { //生成签名
ksort($param);
foreach ($param as $key => $val) {
$string .= $key . '=' . $val . '&';
}
$string .= 'key=' . $this->payment_config[$payment_code]['payment_config']['wxpay_partnerkey'];
return strtoupper(md5($string));
}
//xml转换成数组
private function xmlToArray($xml) {
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
$val = json_decode(json_encode($xmlstring), true);
return $val;
}
//数组转换成xml
private function arrayToXml($arr) {
$xml = "<root>";
foreach ($arr as $key => $val) {
if (is_array($val)) {
$xml .= "<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";
} else {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
}
}
$xml .= "</root>";
return $xml;
}