由于网站使用的微信Native扫码支付,现在公众号需要接入功能,怎么办呢,看这官方文档,参考着demo进行写吧。直接进入正题

进入公众号(服务号)设置--->功能设置--->网页授权域名配置好需要进行支付的页面,支持配置根目录。这一步是为了获取用户的openid。

进入微信商户平台(pay.weixin.qq.com)设置JSAPI支付支付目录,设置路径:商户平台-->产品中心-->开发配置。配置好之后便可以开始着手进行开发,当你看到官方文档的业务流程当中的业务流程时序图的时候,我相信你是一脸懵逼,腾讯的什么都好,就开发文档容易让人给看晕,不过已经算方便了。

由于之前写得一个功能,在用户点击进入页面的时候已经获取用户的信息,并存入到session中,因此下面的代码中的openid直接从session获取。

接下来下载官方demo(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),这里下载php,放到extend目录下,目录结构为

核心代码便是lib文件夹下的类库,example中有官方demo,可以直接进行改写。

文件已经引入,着手实现支付功能,在控制器写index方法

 public function index()
{ if (IS_POST) { include(ROOT_PATH.'extend/Wxpay/lib/WxPay.Api.php');
include(ROOT_PATH.'extend/Wxpay/example/WxPay.JsApiPay.php');
// include(ROOT_PATH.'extend/Wxpay/example/WxPay.config.php');
include(ROOT_PATH.'extend/Wxpay/example/log.php'); try{
$tools = new \JsApiPay();
$openId = session('openid');//这里是之前获取到的openid并存入session,直接从session获取,否则为以下两句 /*$tools = new JsApiPay();
$openId = $tools->GetOpenid();*/
//②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody("在线支付");
$input->SetAttach("在线支付");
$input->SetOut_trade_no($data["orderid"]);
$input->SetTotal_fee($data["pricetotal"]*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
//echo $http_type . $_SERVER['HTTP_HOST'];
$input->SetNotify_url($http_type . $_SERVER['HTTP_HOST']."/index.php/Payoff/Wxpay/notifyurl.html");//notify是接收异步通知的页面,可以进行业务逻辑处理
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$config = new \WxPayConfig();
$order = \WxPayApi::unifiedOrder($config, $input);
$jsApiParameters = $tools->GetJsApiParameters($order); //获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters();
} catch(Exception $e) {
Log::ERROR(json_encode($e));
}
$this->assign('data', $data);
$this->assign('jsApi', $jsApiParameters);
$this->display();
}
else
{
E("Access Denied");
} }

在视图文件中根据自己需要,下面随便写的demo

<form id="thisform" action="#"  method="post">
订单号:{$data['orderid']}<input type="hidden" name="orderid" class="form-control" id="orderid" value="{$orderid}"><br><br>
金额:{$data['pricetotal']} 元<input type="hidden" name="money" class="form-control" id="goodprice" value="50"><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>
</form>
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{ WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{$jsApi},
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>

这里直接用的是官方demo的JS,没有修改,可以根据获取的支付结果做相应的业务逻辑处理。至此便成功调起手机微信端支付,可以根据demo处理自己的业务逻辑。

最新文章

  1. Android桌面快捷方式那些事与那些坑
  2. 第一节 Hibernate 基本配置
  3. URAL 1012 K-based Numbers. Version 2(DP+高精度)
  4. Linux下如何查看哪些端口处于监听状态
  5. codesmith的使用
  6. 基于jsp+servlet图书管理系统之后台用户信息删除操作
  7. struts2整合json要注意的问题
  8. ConcurrentHashMap完全解析(jdk6/7,8)
  9. spring boot整合mybatis基于注解开发以及动态sql的使用
  10. win10升级后,无法ping通vmware的centos解决方法
  11. AngularJS 中&lt;a&gt; 超链接标签不起作用?
  12. mac os 切换网络优先级
  13. 【转】C#获取电脑客户端IP地址及当前用户名
  14. Git(二):常用 Git 命令清单
  15. mongodb - save()和insert()的区别
  16. python multiprocessing多进程模块
  17. 倒置字符串函数reverse
  18. scrapy--dbmeinv
  19. CSUOJ 1637 Yet Satisfiability Again!
  20. UIWebView 无缝切换到 WKWebView

热门文章

  1. Jmeter 中 Bean Shell 之全局变量
  2. SpringBoot使用RedisTemplate操作Redis时,key值出现 \xac\xed\x00\x05t\x00\tb
  3. [HDU]1166敌兵布阵&lt;静态线段树&gt;
  4. U - Inviting Friends HDU - 3244( LIS 最长升序子序列——变形 )
  5. 2288: 【基础】小X转进制
  6. 1127: 【入门】A类多?B类多?
  7. 使用Markdown编辑总结
  8. BigDecimal 笔记
  9. 使用 python 查看谁没有交作业
  10. Mac 系统root