要实现公众号支付功能,前提已经完成了[微信平台支付配置](微信平台支付配置.md)
## 第一步:生成订单
传递商品信息,自动生成订单相关参数
~~~
$appid = '你的公众号appid';
$product = [
'openid'=>'微信用户在商户对应appid下的唯一标识',
'body'=>'商品简单描述',
'out_trade_no'=>'商户系统内部订单号,要求32个字符内、且在同一个商户号下唯一',
'total_fee'=>'订单总金额,单位为元'
];
$callback = '支付成功后的异步回调地址';
$pay = D('Common/Payment')->jsapi_pay($appid, $product, $callback);
if ($pay['status'] == 0) {
$this->error($pay['msg']);
}
$this->assign('pay', $pay);
//支付成功后页面跳转的地址
$this->assign('jump_url', U('show_success'));
~~~
prodect数组是传递最基本的商品参数,同时也支持传递更多微信支付里的[统一下单](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)接口里的参数
参数body请按照规范传递,具体请见[参数规则](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_2)
其中callback回调地址的格式:应用名/model类名/方法名,如:weixin/Service/payok
而jump_url是支付成功后页面跳转的地址,一般是提示成功的界面
>[info] callback与jump_url是区别是:callback是用来接收微信异步提交的支付结果,可用于判断是否成功支付;而jump_url仅用于页面跳转,不可用于判断支付成功与否
## 第二步:前端显示支付按钮
在前端显示支付按钮,用户点击此按钮就可以进入支付流程
~~~
<a href="javascript:void(0)" class="btn" onclick="doPay()">确认结算</a>
<script type="text/javascript">
function jsApiCall(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"{$pay.appId}", //公众号名称,由商户传入
"timeStamp":"{$pay.timeStamp}", //时间戳,自1970年以来的秒数
"nonceStr":"{$pay.nonceStr}", //随机串
"package":"{$pay.package}",
"signType":"{$pay.signType}", //微信签名方式:
"paySign":"{$pay.paySign}" //微信签名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {
window.location.href = "{$jump_url}";
}
}
);
}
function doPay(){
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>
~~~
## 第三步:异步接收支付结果
参考 [异步接收支付结果](异步接收支付结果.md)
# 常见问题
## 支付验证签名失败
![](https://box.kancloud.cn/63703f0a6bef420afcc03f83a10464f7_720x1280.png =300x533)
正常情况下,WeiPHP系统的支付功能都已经验证测试过,如果出现此问题基本是API密钥不对的原因
## 当前页面的url未注册
微信公众平台里的支付配置中的支付目录设置为:http://您的网址/ (如http://www.weiphp.cn/)
原因1:URL的路由模式不对,如以下两个网址都可以正常访问,微信支付会误认为第一个网址的目录应该到jsapi
http://您的网址/index.php/weixin/payment/jsapi (错误的地址)
http://您的网址/index.php?s=/weixin/payment/jsapi (正确的地址)
原因2:当前页面对应的目录确实没有支付目录中配置,需要按照前面章节 [微信平台支付配置](微信平台支付配置.md) 进行配置
- 序言
- 基础
- 安装WeiPHP
- 目录结构
- 错误码分配
- 错误码问答系统
- 入答疑群方法
- 快速入门
- 谈谈开发目标
- 前期准备
- 增加应用
- 编写微信响应代码
- 激动的时刻_体验测试
- 用户
- 用户体系
- 超级管理员
- 运营人员
- 粉丝
- 扫码登录
- 公众号
- 手工绑定
- 一键绑定
- 自定义菜单
- 微信支付
- 微信平台支付配置
- 公众号支付
- 原生扫码支付
- 异步接收支付结果
- 现金红包
- 发放普通红包
- 查询红包记录
- 红包记录数据结构
- 现金支付
- 下发支付
- 查询支付记录
- 现金支付数据结构
- 刷卡支付
- 提交刷卡支付
- 查询刷卡支付记录
- 撤销刷卡支付
- 支付记录数据结构
- API服务
- oauth2.0安全验证
- 后台配置API
- 小程序
- HTTPS部署
- 腾讯云服务器部署
- 阿里云HTTPS部署
- 自发证书HTTPS部署
- openssl升级到1.02
- 自动登录注册
- 短信验证码
- 网络请求
- 上传图片
- 生成事件二维码
- 小程序支付
- 小程序微信支付配置
- 小程序调用支付功能
- 模板消息
- 消息模板配置
- 支付后发模板消息
- 提交表单后发模板消息
- 卡券(会员卡、优惠券)
- 客服
- 与公众号互通
- 微信开放平台
- 一键绑定公众号
- 积分等级
- 积分规则
- 积分操作
- 积分等级数据结构
- 日志
- 后台日志
- 运营日志
- 接口日志
- 调试日志
- 错误日志
- 日志数据结构
- 应用管理
- 应用管理列表
- 新增应用
- 应用开发
- 安装应用
- 模型
- 模型介绍
- 模型管理
- 新增加模型
- 新增加字段
- 列表定义
- 通用视图模板
- 定时任务
- 定时任务介绍
- 配置定时任务
- 开启定时器
- 系统自触发
- window定时器
- Linux定时器
- Mac定时器
- 定时任务数据结构
- 商业应用
- 分销商城
- 教育培训
- 摇红包
- 梦云社区
- 婚庆派
- 部署
- Linux服务器一键安装包部署
- Window集成包部署