微信支付JSAPI(PHP)
本文于427天之前发表,文中内容可能已经过时。
公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。适用于微信浏览器内完成微信支付。配置参考官方文档
实现方法
统一下单示例
$tools = new JsApiPay();
$openId = $tools->GetOpenid();//获取openid
$input = new WxPayUnifiedOrder();
$input->SetBody($name);//商品描述
$input->SetOut_trade_no($out_trade_no);//订单号
$input->SetTotal_fee($amount);//订单总金额,单位分
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url("回调域名");
$input->SetTrade_type("JSAPI");//交易类型
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);//统一下单接口
$jsApiParameters = $tools->GetJsApiParameters($order);
调起微信支付示例
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',{
"appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入
"timeStamp":"1395712654", //时间戳,自1970年以来的秒数
"nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串
"package":"prepay_id=u802345jgfjsdfgsdg888",
"signType":"MD5", //微信签名方式:
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok"){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
}
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
$(function(){
callpay();
})
</script>
回调处理示列
$WxPay = new \WxPayResults();
header('Content-type: text/xml');
$returnResult = $GLOBALS['HTTP_RAW_POST_DATA']; //接收微信发送的信息
$res = $WxPay::Init($returnResult);
if(res['result_code'] == 'SUCCESS'){
/*
* 业务处理
*/
$success = array('return_code' => 'SUCCESS', 'return_msg' => 'OK');
exit(ToXml($success));//转成xml通知给微信
}