首页 > 代码库 > 微信支付JsAPI
微信支付JsAPI
https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip下载获取微信支付demo压缩包打开压缩包,并将其中 WxpayAPI_php_v3\example下的jsapi.phplog.phpWxPay.JsApiPay.phpWxPay.MicroPay.phpWxPay.NativePay.php解压缩到根目录 tellingtent/打开WxPay.JsApiPay.phpWxPay.MicroPay.phpWxPay.NativePay.php将其中涉及调用../lib/......路径的改成lib/......然后即可将微信支付demo压缩包中WxpayAPI_php_v3下的lib文件夹也解压缩到根目录 tellingtent/修改 tellingtent/lib/WxPay.Config.php 以下内容const APPID = ‘wx6385582ec2cc9108‘;//wx426b3015555a46beconst MCHID = ‘1226119502‘;//1900009851const KEY = ‘8eujY70kmgkseu274980kH9e0uri78kd‘;//8934e7d15453e97507ef794cf7b0519dconst APPSECRET = ‘7813490da6f1265e4901ffb80afaa36f‘;//7813490da6f1265e4901ffb80afaa36f这些内容从公众号中获取然后登陆公众号,设置支付授权目录,这里是http://anting.imagchina.com/tellingtent/tellingtent/即是存放支付文件的根目录并且在设置支付授权目录中下载一个MP_verify_2YfIdHkI4jOcQ30B.txt文件,存放到根目录 tellingtent/ 中打开jsapi.php将其中获取openid的$tools->GetOpenid();换成已获取的openid,这里是osKoBjx_vTKa67vgoJjH4Dg81tRk在这里暂时不借用官方的获取openid方法在微信中打开http://anting.imagchina.com/tellingtent/jsapi.php即可进行支付jsapi.php里的支付回调单号SetOut_trade_no自定义赋值,但不能重复,在支付成功后,微信会回调jsapi.php里SetNotify_url设定的路径,回调信息中有对应付款成功的out_trade_no单号最好在调用微信支付的js方法callpay()之前,先创建本地的订单信息,保存out_trade_no单号,并且设定支付状态为未支付在设定好的回调页面中根据支付成功的out_trade_no单号修改数据库中对应订单的付款状态为支付成功支付成功后回调页面内容PHP非以传统$_GET,$_POST方式获取微信回调内容,以 $GLOBALS["HTTP_RAW_POST_DATA"]; 获取例<?php//$postStr获取到的是格式化字符串内容$postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];?>例<xml><appid><![CDATA[wx6385582ec2cc9108]]></appid> <attach><![CDATA[嘉亭荟移动故事屋]]></attach><bank_type><![CDATA[CMB_DEBIT]]></bank_type> <cash_fee><![CDATA[8000]]></cash_fee><fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe><mch_id><![CDATA[1226119502]]></mch_id> <nonce_str><![CDATA[d0hh1c3m1ynd52qhajgsk6jwqcvkez0p]]></nonce_str><openid><![CDATA[osKoBj2iVkFtf8-MBcHXyWkaXT4k]]></openid> <out_trade_no><![CDATA[122611950220160923172852]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[D4F31510A3EED6F54AB0B4A02D772C98]]></sign> <time_end><![CDATA[20160923173254]]></time_end><total_fee>8000</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[4006602001201609234721061954]]></transaction_id></xml>需要手动截取获取其中想要信息值如想要out_trade_no与transaction_id的值例<?php$postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];$trade_noarr = explode ( "out_trade_no><![CDATA[", $postStr );$trade_noarr = explode ( "]]></out_trade_no", $trade_noarr [1] );$out_trade_no = $trade_noarr [0];$arr = explode ( "transaction_id><![CDATA[", $postStr );$arr = explode ( "]]></transaction_id", $arr [1] );$transaction_id = $arr [0];// 即可根据返回的订单号修改数据库中对应订单信息?>微信成功后同一单号会多次回调信息内容,一般三次设定的支付路径是根目录 tellingtent/ 不变可以把之前的jsapi.phplog.phpWxPay.JsApiPay.phpWxPay.MicroPay.phpWxPay.NativePay.phplib文件夹单独放到某个目录下面例如这里放到根目录下的tellingtent/testpay文件夹里把支付样例jsapi.php文件中的html部分代码提取出来单独存放在根目录下的某个文件内,这里是tellingtent/testpay.php代码内容<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><script type="text/javascript" src="http://www.mamicode.com/testpay/jquery.min.js"></script><title>微信支付样例-支付</title><script type="text/javascript"> var jsApiParameters = ‘‘; $.post("./testpay/jsapi.php",{},function(data){ jsApiParameters = data; alert(jsApiParameters); },"json") //调用微信JS api 支付 function jsApiCall() { if(jsApiParameters){ WeixinJSBridge.invoke( ‘getBrandWCPayRequest‘, jsApiParameters, function(res){ WeixinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); } ); } } 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(); } } </script></head><body> <br /> <font color="#9ACD32"><b>该笔订单支付金额为<span style="color: #f00; font-size: 50px">1分</span>钱 </b></font> <br /> <br /> <div align="center"> <button style="width: 210px; height: 50px; border-radius: 15px; background-color: #FE6714; border: 0px #FE6714 solid; cursor: pointer; color: white; font-size: 16px;" type="button" onclick="callpay()">立即支付</button> </div></body></html>原页面直接通过php获取的jsApiParameters,改为通过ajax获取这样tellingtent/testpay文件夹内的原文件jsapi.php里只剩下之前的php代码<?php ini_set(‘date.timezone‘,‘Asia/Shanghai‘);//error_reporting(E_ALL);require_once "lib/WxPay.Api.php";require_once "WxPay.JsApiPay.php";require_once ‘log.php‘;//初始化日志$logHandler= new CLogFileHandler("../logs/".date(‘Y-m-d‘).‘.log‘);$log = Log::Init($logHandler, 15);//打印输出数组信息function printf_info($data){ foreach($data as $key=>$value){ //echo "<font color=‘#00ff55;‘>$key</font> : $value <br/>"; }}//①、获取用户openid$tools = new JsApiPay();$openId = ‘osKoBjx_vTKa67vgoJjH4Dg81tRk‘;//$tools->GetOpenid();//②、统一下单$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://paysdk.weixin.qq.com/example/notify.php");$input->SetTrade_type("JSAPI");$input->SetOpenid($openId);$order = WxPayApi::unifiedOrder($input);//echo ‘<font color="#f00"><b>统一下单支付单信息</b></font><br/>‘;printf_info($order);$jsApiParameters = $tools->GetJsApiParameters($order);echo $jsApiParameters;exit;//获取共享收货地址js函数参数//$editAddress = $tools->GetEditAddressParameters();//③、在支持成功回调通知中处理成功之后的事宜,见 notify.php/** * 注意: * 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功 * 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”, * 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html) */?>如此微信中访问http://anting.imagchina.com/tellingtent/testpay.php也可以进行支付只要支付调用js的文件在支付授权指定目录中即可
微信支付JsAPI
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。