微信的app支付,为了实现ios跟安卓的同时使用,还有就是为了保证支付的安全性,所以把微信app支付中的统一下单跟签名都放在了服务器端,这里用的是yii2中的api接口处理的,在签名时也是遇到了一些问题,这里做一下总结:

微信app支付没有单独的包,微信的官方文档中也没有具体的服务器端的demo,所以第一次做还是很费劲的,所以就索性用微信公众号支付的包吧。

这是微信app在yii2中的目录截图:

跟微信公众号支付的包基本是一样的,只是在签名的时候,我做了一些改动:

控制器是这样的:?php

namespace api\modules\RestApi\modules\v1\controllers;

use Yii;

use api\modules\RestApi\controllers\CommonController;

use common\lib\WxAppPay\WxPayApi;

use common\models\Store;

use common\models\AlipayRecord;

use common\models\Order;

use common\models\Paylog;

use common\models\Cashrecord;

use common\lib\WxAppPay\Extend\WxPay;

use common\lib\WxAppPay\Extend\PayNotify;

use common\lib\AliAppPay\lib\AlipayRsaNotify;

use common\lib\AliAppPay\lib\AlipayRsaSubmit;

class PaysController extends CommonController

{

public $modelClass = 'api\modules\RestApi\models\Order';

public function init()

{

parent::init();

$this->enableCsrfValidation = false;

}

public function actionView($id) //微信app的支付准备

{

if (empty($id))

throw new \Exception('参数错误!');

$model = new $this->modelClass;

$res = $model->isPayResult($id); //判断是否支付

$store = new Store();

$storeInfo = $store->getFrontOne(['id'=>$res['info']->storeid]);

$WxPay = new WxPay();

try {

//统一下单

$input = new \WxPayUnifiedOrder();

$input->SetBody("小程府-" . $storeInfo->name); //商品详情

$input->SetOut_trade_no($id);

$input->SetTotal_fee($res['info']->yingshou * 100); //金额

$input->SetTime_start(date("YmdHis"));

$input->SetTime_expire(date("YmdHis", time() + 600));

$input->SetGoods_tag("xcf");//商品标记

$input->SetNotify_url("http://api.xxx.cn/RestApi/v1/pays/notifywx/");

$input->SetTrade_type("APP");

$UnifiedOrderResult = WxPayApi::unifiedOrder($input);

$apps = $WxPay->GetAppApiParameters($UnifiedOrderResult);//返回签名

return $this->ajaxReturn($apps);

} catch (\Exception $e) {

return $e->getMessage();

}

}

public function actionNotifywx(){ //微信app的回调

//        $rsv_data = $GLOBALS ['HTTP_RAW_POST_DATA'];

//        $re = xmlarray($rsv_data);‘php://input', ‘r'

//        $rsv_data = file_get_contents('php://input');

$notify = new PayNotify();

$notify->Handle(false);

}

这里用到的wxpay类也在common/lib/wxAppPay/Extend中,签名部分做了改动,代码如下:public function GetAppApiParameters($UnifiedOrderResult)

{

if(!array_key_exists("appid", $UnifiedOrderResult)//公众账号id

|| !array_key_exists("prepay_id", $UnifiedOrderResult)

|| $UnifiedOrderResult['prepay_id'] == "")

{

throw new \WxPayException("参数错误");

}

$jsapi = new \WxPayJsApiPay();

$jsapi->SetAppid($UnifiedOrderResult["appid"]);//重新设置公众号id

$jsapi->SetPartnerid($UnifiedOrderResult["mch_id"]);//商户号id

$jsapi->SetPrepayid($UnifiedOrderResult["prepay_id"]);//预支付id

$jsapi->SetPackage("Sign=WXPay");//设置订单详情扩展字符串

$jsapi->SetNonceStr(WxPayApi::getNonceStr());//设置随机字符串

$timeStamp = time();

$jsapi->SetTimeStamp("$timeStamp");//设置支付时间戳

//    $jsapi->SetSign($jsapi->MakeSign());

$parameters1 = $jsapi->GetValues();//获取设置的值

//签名要放到最后一步,把时间戳也要拿来签名

$jsapi->SetAppSign($parameters1);

//    $jsapi->setPackage_app("Sign=WXPay");

//将签名重新放到返回的值里返回

$parameters = $jsapi->GetValues();//获取设置的值

unset($parameters['package']);

$parameters['package_app'] = "Sign=WXPay";

return $parameters;

}

注意:上面的注释部分很重要,如果不按微信文档中的走,签名始终是失败的,那是相当痛苦的一件事

还有回调,跟微信公众号支付是一样的,这里我也把app支付的包提供出来:

百度云链接: http://pan.baidu.com/s/1eSkFlsQ密码: ge2f  拿走不谢,如果遇到什么问题,可以qq联系!

微信支付不使用服务器端,微信支付之app支付服务器端相关推荐

  1. 微信支付API v3签名与验签-APP支付问题

    目录 使用API v3微信支付遇到的问题: 1.微信请求客户端配置 2.生成预付款订单 3.拼接字符串使用API v3签名 4.微信支付成功后通知 使用API v3微信支付遇到的问题: 1.jdk版本 ...

  2. 微信,支付宝,百度钱包三种APP支付成功关闭浏览器

    下面是三种移动app的关闭方式: ? 1 2 3 WeixinJSBridge.call( 'closeWindow' ); //微信 AlipayJSBridge.call( 'closeWebvi ...

  3. 微信支付-App支付服务端详解

    微信App支付服务端详解 引言 主要实现app支付统一下单.异步通知.调起支付接口.支付订单查询.申请退款.查询退款功能:封装了https对发起退款的证书校验.签名.xml解析等. 支付流程 具体支付 ...

  4. 2016年微信app支付开发填坑篇

    之前开发过高德地图的,百度地图的,人家官网的资料,开发文档,官方论坛,应有尽有,特别详细.微信支付相对支付宝支付,操作繁琐了很多,而且有些文档上的说明太过专业,导致问题多多. 首先他们官网上面只有ec ...

  5. 微信APP支付(基于Java实现微信APP支付)

    步骤: 导入maven依赖 <!--微信支付--><dependency><groupId>com.github.wxpay</groupId>< ...

  6. Android App支付系列(一):微信支付接入详细指南(附官方支付demo)

    写在前面 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一.梳理了下微信支付的接入,今天给大家分享下腾讯旗下的 ...

  7. 微信支付、公众号支付、微信APP支付教程

    这两天有朋友问我微信支付的一些事情,我就抽了点时间整理了一下微信支付相关的一些东西,在这里分享给大家,希望能帮助大家少走弯路. 微信支付分为APP支付和公众号支付两大类,其中公众号支付又分为(公众号支 ...

  8. 微信支付APP支付服务商模式

    微信的文档无力吐槽.各种设置凌乱繁杂,我已经记不清正确的操作步骤了,只能整理一些必要的配置. 服务商模式的APP支付需要用到这几个关键参数:服务商的APPID.服务商的商户号MchId.子商户的Sub ...

  9. php h5微信支付和app微信支付区别,关于微信公众号支付 微信H5支付和微信APP支付的问题 (PHP)TP+VUE...

    话不多说 直接上源码 在写支付之前一定要确定好微信要求配置的相关回调域名 安全支付域名还有杂七杂八的哪些地址都准备好了 要不然是没法实现的 微信公众平台 微信商户平台 还有开发者平台 什么的 这点比较 ...

  10. 微信APP支付-Java后台实现

    微信APP支付-Java后台实现 转自:http://blog.csdn.net/walle167/article/details/50957503 1 注册微信开放者平台 开发者平台地址:https ...

最新文章

  1. 抖音出现大量“三岁用户”,马化腾李彦宏都被还童
  2. Android:sqlite问题小结
  3. 使用Java使用Amazon Simple Queue Service
  4. 超级计算机应用领域的概括,超级计算机进展的相关研究
  5. 【numpy】生成一串0/1(True/False)mask序列
  6. ASP.NET MVC TagBuilder使用
  7. 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览
  8. Spring Cloud 配置中心中的native配置
  9. 计算机中的进制位运算
  10. 全球首个用户分享区块链+AI大数据体系,专业跨境医疗机构“海医通”发布XMC“海医链”
  11. hivesql 列转行,并用逗号分隔
  12. 计算机组装与维修的前言,计算机组装与维修论文大纲模板 计算机组装与维修论文提纲如何写...
  13. 蒲公英快速查询苹果手机UDID方法
  14. SQL语句进阶学习一(where、通配符、正则表达式、计算字段、数据处理函数、分组数据)
  15. 风变编程python18_如何看待风变编程的 Python 网课?
  16. Dell Inspiron 15R - QQ语音时麦克风没有声音的设置办法
  17. WINCC 报警语音播报
  18. 软件设计文档国家标准
  19. 开关电源变压器基础知识
  20. android系统看片软件,真正的手机看片神器 和视界手机APP评测

热门文章

  1. 杰里之AC696 列 系列 高关功放在软关机下的处理【篇】
  2. 帮助 Java 开发人员进行 Bean 映射的 8 大框架
  3. Java中Super()的意义
  4. 【Swift初见】Swift数组
  5. STM32F29显示中文汉字
  6. 用HTML和css写一个简单地购物小票
  7. Jboss ejb 开发心得!
  8. 洛谷P2168荷马史诗(小根堆)
  9. index.jsp 中文乱码问题
  10. CANanlystII 基于python的二次开发实践