您的位置:

微信jsapi源码(微信开发API)

微信jsapi源码(微信开发API)

更新:

本文目录一览:

微信的jsapi支付能整合到thinkphp吗

在demo文件夹中:

js_api_call.php:提供了微信jsapi的主要功能

log_.php:提供打印日志功能

notify_url.php:异步通知功能

notify_url.log:异步通知日志

qrcode.js:生成二维码js插件

接下来介绍下WxPayPubHelper文件夹下的文件:

cacert 文件夹是存放微信证书的(PS:具体我还没怎么用证书,虽然下载下来了,证书请在微信商户平台上下载)

SDKRuntimeException.php:这个就是处理异常的、

WxPay.pub.config.php:这个是做一些配置的,稍后会详细讲解

WxPayPubHelper.php:这个其实就是微信支付的工具类,对于初学者只要知道怎么用他里面的方法就够了

OK,了解了微信官方提供的文件,我们就可以开始整合到TP中了,废话不多说,这就开始!

step1:将demo中的WxPayPubHelper整个文件夹都复制到TP的Vendor目录下,像我这样:

step2:配置WxPay.pub.config.php文件:

这里的配置都有注释,如果还有不懂或者配置出现问题可以留言提问

同时我把微信的这个配置放到了TP的config中,这一步大家可以随意

?php

return array(

//'配置项'='配置值'

define('WEB_HOST', '这是您的网站域名地址'),

/*微信支付配置*/

'WxPayConf_pub'=array(

'APPID' = '您的APPID',

'MCHID' = '您的商户ID',

'KEY' = '商户秘钥',

'APPSECRET' = '您的APPSECRET',

'JS_API_CALL_URL' = WEB_HOST.'/index.php/Home/WxJsAPI/jsApiCall',

'SSLCERT_PATH' = WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_cert.pem',

'SSLKEY_PATH' = WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_key.pem',

'NOTIFY_URL' = WEB_HOST.'/index.php/Home/WxJsAPI/notify',

'CURL_TIMEOUT' = 30

)

);

复制代码

step3:将生成二维码的js放在Public目录下(这里目前用不到,在用扫码支付的情况才用到这个js),将日志文件放在Public目录下:像我这样:

step4:创建控制器:这里创建了一个WxJsAPIController的控制器,这里大家随便起名字,只要这个跟你们在公众平台上的设置相对应就可以(公众平台设置稍后介绍)

下面是控制器的代码部分了,首先初始化控制器,将WxPayPubHelper导入

/**

* 初始化

*/

public function _initialize()

{

//引入WxPayPubHelper

vendor('WxPayPubHelper.WxPayPubHelper');

}

复制代码

接下来是使用统一支付接口,获取prepay_id的方法:

public function jsApiCall()

{

//使用jsapi接口

$jsApi = new \JsApi_pub();

//=========步骤1:网页授权获取用户openid============

//通过code获得openid

if (!isset($_GET['code']))

{

//触发微信返回code码

$url = $jsApi-createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL'));

Header("Location: $url");

}else

{

//获取code码,以获取openid

$code = $_GET['code'];

$jsApi-setCode($code);

$openid = $jsApi-getOpenId();

}

//=========步骤2:使用统一支付接口,获取prepay_id============

//使用统一支付接口

$unifiedOrder = new \UnifiedOrder_pub();

//设置统一支付接口参数

//设置必填参数

//appid已填,商户无需重复填写

//mch_id已填,商户无需重复填写

//noncestr已填,商户无需重复填写

//spbill_create_ip已填,商户无需重复填写

//sign已填,商户无需重复填写

$unifiedOrder-setParameter("openid",$openid);//商品描述

$unifiedOrder-setParameter("body","贡献一分钱");//商品描述

//自定义订单号,此处仅作举例

$timeStamp = time();

$out_trade_no = C('WxPayConf_pub.APPID').$timeStamp;

$unifiedOrder-setParameter("out_trade_no",$out_trade_no);//商户订单号

$unifiedOrder-setParameter("total_fee","1");//总金额

$unifiedOrder-setParameter("notify_url",C('WxPayConf_pub.NOTIFY_URL'));//通知地址

$unifiedOrder-setParameter("trade_type","JSAPI");//交易类型

//非必填参数,商户可根据实际情况选填

//$unifiedOrder-setParameter("sub_mch_id","XXXX");//子商户号

//$unifiedOrder-setParameter("device_info","XXXX");//设备号

//$unifiedOrder-setParameter("attach","XXXX");//附加数据

//$unifiedOrder-setParameter("time_start","XXXX");//交易起始时间

//$unifiedOrder-setParameter("time_expire","XXXX");//交易结束时间

//$unifiedOrder-setParameter("goods_tag","XXXX");//商品标记

//$unifiedOrder-setParameter("openid","XXXX");//用户标识

//$unifiedOrder-setParameter("product_id","XXXX");//商品ID

$prepay_id = $unifiedOrder-getPrepayId();

//=========步骤3:使用jsapi调起支付============

$jsApi-setPrepayId($prepay_id);

$jsApiParameters = $jsApi-getParameters();

$this-assign('jsApiParameters',$jsApiParameters);

$this-display('pay');

//echo $jsApiParameters;

}

复制代码

这里都是复制微信demo的,改改名字罢了,没什么其他的

接下来是异步通知方法,也是复制的微信demo上的

public function notify()

{

//使用通用通知接口

$notify = new \Notify_pub();

//存储微信的回调

$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

$notify-saveData($xml);

//验证签名,并回应微信。

//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,

//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,

//尽可能提高通知的成功率,但微信不保证通知最终能成功。

if($notify-checkSign() == FALSE){

$notify-setReturnParameter("return_code","FAIL");//返回状态码

$notify-setReturnParameter("return_msg","签名失败");//返回信息

}else{

$notify-setReturnParameter("return_code","SUCCESS");//设置返回码

}

$returnXml = $notify-returnXml();

echo $returnXml;

//==商户根据实际情况设置相应的处理流程,此处仅作举例=======

//以log文件形式记录回调信息

// $log_ = new Log_();

$log_name= __ROOT__."/Public/notify_url.log";//log文件路径

log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");

if($notify-checkSign() == TRUE)

{

if ($notify-data["return_code"] == "FAIL") {

//此处应该更新一下订单状态,商户自行增删操作

log_result($log_name,"【通信出错】:\n".$xml."\n");

}

elseif($notify-data["result_code"] == "FAIL"){

//此处应该更新一下订单状态,商户自行增删操作

log_result($log_name,"【业务出错】:\n".$xml."\n");

}

else{

//此处应该更新一下订单状态,商户自行增删操作

log_result($log_name,"【支付成功】:\n".$xml."\n");

}

//商户自行增加处理流程,

//例如:更新订单状态

//例如:数据库操作

//例如:推送支付完成信息

}

}

复制代码

这里我把记录日志的类写到了function.php中:

function log_result($file,$word)

{

$fp = fopen($file,"a");

flock($fp, LOCK_EX) ;

fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n");

flock($fp, LOCK_UN);

fclose($fp);

}

复制代码

好了 其实控制器的方法就这么多,没什么其他的了,下面看一下页面,直接上代码吧:

!DOCTYPE html

html

head

meta http-equiv="content-type" content="text/html;charset=utf-8"/

title微信安全支付/title

script type="text/javascript"

//调用微信JS api 支付

function jsApiCall()

{

WeixinJSBridge.invoke(

'getBrandWCPayRequest',

?php echo $jsApiParameters; ?,

function(res){

WeixinJSBridge.log(res.err_msg);

alert(res.err_code+res.err_desc+res.err_msg);

//alert("{$jsApiParameters}");

}

);

}

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/br/br/br

div align="center"

button style="width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" 贡献一下/button

/div

/body

/html

复制代码

无须改动什么,直接复制就好

接下来是微信公众平台上的配置了,这里我遇到过问题,如果有在这里遇到问题的同学请留言,比如出现了access_deined或者access_notallowed等问题,这都可能是因为这里配置不对。

JS交互微信之JSAPI支付

本篇为 JS交互微信系列篇 的第四篇 微信JSAPI支付 ,记录在微信内置浏览器内用调用微信支付过程。

JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。

要拥有两个账号:

要开通产品中心的JSAPI支付。然后 产品中心=开发配置=支付配置=公众号支付配置 绑定支付授权目录,写已通过ICP备案的域名。

另外,要在ip白名单中,配置测试地址ip和线上生产地址ip,不然各种回调都会失败!

由于在微信内支付需要获取用户的 openid ,要获取它则必须通过网页授权配置。在公微信公众平台中, 公众号设置=功能设置=网页授权域名 中按要求填写。

在支付流程方面,重点依然都在后端处理,前端方面步骤比较简单。本文只叙述前端内容。

在将要进入支付的前一页面,直接接入微信授权,然后跳转进要支付的那个页面。举个例子:有a、b两个页面,在b页面用到支付,b页面由a页面跳转而来。那么在a页面跳b页面的时候,别直接跳转b的url,而是跳转到:

{appId}redirect_uri={b.html}response_type=codescope=snsapi_base#wechat_redirect

我们注意到,这里有这两个需要自己写的参数: appid 和 redirect_uri ,意义是:

另外,还有一个注意的点是, b.html这个url我们要进行encode转码,不然地址解析可能会出现问题!

上一步执行完后,在微信浏览器中,我们会得到一个链接,类似:

b.html?code={code}state=#/

在此处,我们得到了一个code值,这就是我们获取 openid 的凭证了。

获取方法当然是把值传给后台,后台去处理啦~

在上一步中,我们拿到code值后,就可以提交一些信息给后端了,比如商品相关属性、总价等,另外加上code值,传给后端。后端一顿操作后,返回给前端。我们需要的参数如下(后端返回下面这些参数):

上个步骤拿到需要交互微信的参数后,就开始调用微信的支付接口了,如下:

至此,调用微信JSAPI来完成在微信内的支付就完成了。

微信支付怎么配置jsapi

微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如付款码支付、JSAPI支付、小程序支付、APP支付、电脑网站支付、企业微信支付、H5支付,以及多种支付工具,如微信红包、代金券等。

微信支付配置步骤:

步骤1:注册支付商户号

步骤2、秘钥(32位)

步骤3、上传证书

步骤4、商户号新增小程序授权(注意授权状态是否是成功)

步骤5、公众号支付、JSAPI开通

登录小程序后台找到配置管理→支付配置

登录开通微信支付商户平台(),在微信支付商户平台里面进行查找商户号和设置API密钥、下载证书

以下步骤查找上述基础的内容在哪个地方查找。

步骤1、支付商户号查找:

(注:登录商户号尽量使用360浏览器或者谷歌浏览器)

进入后在 账户中心—商户信息、可以看到微信支付商户号、把商户号记一下,填到后台。

注:首次进入微信支付后台需要下载控件和操作证书(按照提示一步步操作即可)

步骤二:API密钥:随后点击下面的API安全、设置一下API秘钥,API密钥必须是32位字母或数字

注:该处设置秘钥时看下设置下方的API秘钥,不要设置APIV3的秘钥。

注:该处设置下后把新设置的密钥填到制作后台。

步骤三:证书路径、密钥路径:API秘钥设置好了之后、点击下载API证书

(注:该处证书上传用于退款。退款需要往商户号里充值钱。)

下载后是一个压缩包,然后解压、然后根据名称分别上传到证书路径、密钥路径。

步骤四:小程序在公众号里申请,公众号里开通的微信支付;该方式需要先登录商户号-产品中心-APPID授权管理-新增该小程序的授权。具体如下图:

如提示已绑定(此步骤跳过)

授权后到微信小程序后台同意授权。如图:

确保上图申请单状态是授权成功。

步骤五:查看微信支付商户号公众号支付、JSAPI是否开通。如下图:(如未开通,点击开通下,如果没有公众号支付可不用管)

(1)公众号支付开通(如果没有公众号支付,此步骤跳过)

(2)JSAPI开通

微信jsapi源码(微信开发API)

本文目录一览: 1、微信的jsapi支付能整合到thinkphp吗 2、JS交互微信之JSAPI支付 3、微信支付怎么配置jsapi 微信的jsapi支付能整合到thinkphp吗 在demo文件夹中

2023-12-08
微信支付jsapi完整源码(微信jsapi支付demo)

本文目录一览: 1、如何用PHP实现微信支付,求教。新手!说明详细点 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信的jsapi支付能整合到think

2023-12-08
jsapi微信支付源码(小微商户jsapi支付)

本文目录一览: 1、微信支付怎么配置jsapi 2、JS交互微信之JSAPI支付 3、java实现微信支付,通过JSAPI发起支付请求 4、微信支付后端篇 微信支付怎么配置jsapi 微信支付,是微信

2023-12-08
微信JSAPI全面指南

2023-05-17
ios调用jsapi,ios调用微信支付

本文目录一览: 1、如何在React中调用微信的jsSDK 2、微信支付时jsapi缺少参数appid怎么办 3、php微信支付,调用jsapi的时候,IOS成功支付,安卓提示fail_invalid

2023-12-08
微信JSAPI支付详解

2023-05-21
php开发微信支付小微商户v3,html5微信支付php

2023-01-07
微信小程序转php,微信小程序转h5

2022-11-24
java版微信js(java微信软件下载)

2022-11-10
微信网页js操作(微信网页js操作流程)

本文目录一览: 1、微信小程序wxs的使用(当页面数据渲染前添加js操作) 2、公众号h5中使用微信JS-SDK(个人笔记) 3、JS交互微信之JSAPI支付 微信小程序wxs的使用(当页面数据渲染前

2023-12-08
微信小程序php文件路径,微信小程序php文件路径怎么改

2022-11-18
微信小程序php传值,微信小程序 传值

2022-12-02
微支付js调用实例,前端实现微信支付

本文目录一览: 1、微信h5支付和jsapi支付的区别 2、redirect_url参数错误总结 3、微支付怎么用啊 4、微信公众平台如何开通微信支付? 5、微支付怎么开通 6、微支付中扫码支付开发流

2023-12-08
php版微信js,微信公众号 php

2022-11-19
php微信支付v3版签名生成(php 微信支付流程)

2022-11-12
微信phpjssdk,微信php接口

本文目录一览: 1、微信开发的jssdk,php怎么用 2、微信公众平台的jssdk.php起的什么作用 3、phpjssdk微信分享到朋友圈怎么添加内容 4、怎么使用微信JSSDK的自定义分享功能

2023-12-08
微信java,微信java版本下载

2022-12-02
java微信,java微信公众号开发教程

2023-01-06
百度文库微信小程序php,百度文库小程序的文档怎么下载

2023-01-03
微信java,微信java库

2023-01-09