APP封装从一门开始
一门提供APP封装底层开发框架,一键在线APP封装,200+原生APP模块,2000+JS映射接口按需自助封装

个人开发h5调用app微信支付

网页开发者在项目中常常会遇到需要在 H5 页面中调用 APP 微信支付的情况。而使用微信支付,相对于其它支付方式,拥有便捷支付、高安全性、大众接受度高等优势。因此,本文将详细介绍个人开发 H5 调用 APP 微信支付的原理和步骤。

## 一、支付准备工作

在开始开发 APP 微信支付之前,需要先完成以下的支付准备工作:

1. 拥有微信商户号,在微信支付控制台完成商户注册和实名认证;

2. 在微信开放平台上创建应用,并获取 AppID;

3. 安装微信开发者工具。

## 二、微信支付流程

微信支付的流程分为两类,Web 接口和 Native 接口。Web 接口以网页形式呈现,不需要安装 App,只需使用微信扫一扫即可打开 Web 页面完成支付。而 Native 接口需要在移动设备上安装微信 App 才能调用微信支付。

本文主要讲解 Native 接口的微信支付流程。

1. 应用向微信终端发起支付请求,微信终端调起支付模块;

2. 用户输入密码或扫描指纹,在微信终端内完成支付;

3. 微信终端向商户服务器发送支付结果通知,商户服务器执行相关操作(比如发货、发票);

4. 微信支付完成。

## 三、H5 接入微信支付

H5 接入微信支付与 Native 接入微信支付的原理不一样,具体步骤如下:

1. 应用将支付信息发送给商户的服务器;

2. 商户服务器对支付信息进行验证,并调用微信支付统一下单 API,获取 prepay_id;

3. 商户服务器使用 prepay_id 进行签名,生成 JSAPI 支付请求参数;

4. 将 JSAPI 支付请求参数返回到 H5 页面;

5. H5 页面中调用微信 JSAPI 接口,并将该接口返回的数据通过“统一下单接口”获得的 prepay_id 生成微信支付界面。

具体步骤详见下文代码示例。

## 四、支付交互流程

以下是 H5 页面和 Native 端的交互流程:

1. H5 页面调用商户服务生成 JSAPI 支付参数;

2. 商户服务将生成的支付参数返回给 H5 页面;

3. 用户在 H5 页面上点击“支付”按钮;

4. H5 页面通过微信 JSAPI 调起微信原生支付界面;

5. 用户在微信原生支付界面内完成支付;

6. 返回到商户的支付结果回调页面,完成支付。

## 五、代码示例

下面是一个简单的微信 H5 支付实现示例,实例代码使用 Node.js 进行编写。

1. 首先在 Node.js 中选择 http 模块启动一个服务器:

```javascript

var http = require('http');

var url = require('url');

var util = require('util');

var fs = require('fs');

var path = require('path');

http.createServer(function(req, res) {

var pathname = url.parse(req.url).pathname;

var realPath = __dirname + pathname;

console.log(pathname);

fs.readFile(realPath, function(err, data) {...

```

2. 接着,在服务器起来时,我们访问服务器时会向服务器发送 GET 请求,在 Node.js 的 http 模块中,我们可以通过 req.url 获取到 url 中的参数,此时我们需要对接收到的信息进行签名和回调处理。这里示例代码采取了 GET 静默授权模式:

```javascript

var urlObj = url.parse(req.url, true);

var query = urlObj.query;

var sign = '';

// 签名算法

sign = ...

// 利用小程序的授权码code,获取openid和access_token

...

// 预支付交易单子

var paymentData = '';

// 可以在此处生成商户订单号

var out_trade_no = ...

// 支付信息

var paymentInfo = {

appid: 'your appid',

body: 'XXXX',

mch_id: 'your mch_id',

nonce_str: '',

notify_url: 'http://www.xxx.com/wxpay_notify.asp',

openid: '',

out_trade_no: out_trade_no,

spbill_create_ip: '192.168.2.210',

total_fee: '',

trade_type: 'JSAPI'

};

paymentInfo.nonce_str = ...

// 根据相关参数生成信息

paymentInfo.sign = ...

var innerXML = '' +

'appid' + paymentInfo.appid + '/appid>' +

'body' + paymentInfo.body + '/body>' +

'mch_id' + paymentInfo.mch_id + '/mch_id>' +

'nonce_str' + paymentInfo.nonce_str + '/nonce_str>' +

'notify_url' + paymentInfo.notify_url + '/notify_url>' +

'openid' + paymentInfo.openid + '/openid>' +

'out_trade_no' + paymentInfo.out_trade_no + '/out_trade_no>' +

'spbill_create_ip' + paymentInfo.spbill_create_ip + '/spbill_create_ip>' +

'total_fee' + paymentInfo.total_fee + '/total_fee>' +

'trade_type' + paymentInfo.trade_type + '/trade_type>' +

'';

var url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';

...

```

3. 完成签名和支付信息的处理之后,我们向微信统一下单接口发送预支付单号生成请求:

```javascript

var options = {

hostname: hostname,

path: path,

method: method,

headers: {

'Content-Type': 'application/xml',

'Content-Length': Buffer.byteLength(reqBody)

}

};

var req = https.request(options, function(res) {

var resBody = '';

res.setEncoding('utf8');

res.on('data', function(chunk) {

resBody += chunk;

});

res.on('end', function() {

var parseString = require('xml2js').parseString;

parseString(resBody, function(err, result) {

if (result.xml.result_code == 'SUCCESS' &&

result.xml.return_code == 'SUCCESS') {

var ret = {

appId: paymentInfo.appid,

timeStamp: timeStamp.toString(),

nonceStr: paymentInfo.nonce_str,

package: 'prepay_id=' + result.xml.prepay_id,

signType: 'MD5'

};

ret.paySign = ...

}

});

});

});

req.on('error', function(err) {

console.log('请求微信支付服务器出错:' + err.message);

});

req.write(reqBody);

req.end();

```

4. 最后,我们将获得的微信支付 ID 处理为 JSAPI 支付方式,并将返回数据发送到 H5 页面:

```javascript

var jsApiData = {

appId : '',

timeStamp : '',

nonceStr : '',

package : '',

signType : 'MD5',

paySign : ''

};

jsApiData.appId = ...

jsApiData.timeStamp = ...

res.writeHead(200, {

'Content-Type': 'application/json',

'Access-Control-Allow-Origin': '*'

});

res.write(JSON.stringify(jsApiData));

res.end();

```

至此,我们就能在 H5 页面中调起微信原生支付界面,实现 H5 调用微信支付的功能了。

## 六、总结

以上就是个人开发 H5 调用 APP 微信支付的原理和步骤详解。需要注意的是,随着微信支付的不断更新,其支付流程和接口调用方式可能会有所改变,同时在开发过程中需要严格按照微信支付 API 的要求来进行,确保支付过程中的正确性和安全性。


相关知识:
用h5怎么开发仓库app
仓库管理是企业不可或缺的一部分,管理好仓库的库存,能够提高企业的效率和盈利。而开发一款仓库管理app,可以让企业管理更加便捷高效。本文将详细介绍如何用h5开发一款仓库管理app。一、需求分析1. 用户管理:包含用户登录、注册、修改密码等功能。2. 仓库管理
2023-05-26
也在搞h5开发app
H5开发app,也叫做混合开发,是指使用Web技术进行APP的开发,常见的框架有Cordova、Ionic、React Native等。相比于原生开发,H5开发app具有开发简便、跨平台、快速迭代等优点,同时也存在着一些限制,如性能较弱、不能支持所有的原生
2023-05-26
什么手机app可以制作h5小游戏的
在现代移动互联网时代,手机应用程序的重要性越来越受到关注。许多人使用手机应用程序进行沟通、学习和娱乐等活动。在移动应用程序的娱乐领域中,H5小游戏也越来越受欢迎,因为它们可以通过浏览器在任何时间、任何地点轻松游玩。这种小游戏可以制作得很简单,只需要一个好的
2023-05-26
免费的h5制作app
随着移动互联网的普及,越来越多的企业和个人开始意识到,拥有一款属于自己的App能够带来巨大的商业价值。但是制作App需要借助专业的开发工具,而这些工具通常要求掌握一定的编程技能和开发经验,所以对于很多人来说是一项难以完成的任务。而近年来,出现了不少基于h5
2023-05-26
抖音广告h5制作软件app排行榜
抖音广告H5制作软件App,指的是一款可以帮助广告主在抖音平台上创建和发布H5广告的手机应用程序。在抖音平台上,H5广告是一种常用的广告形式,它与传统的图像或视频广告相比,更具有交互性和创意性,可以吸引更多用户的注意力,提高广告点击率和转化率。而H5广告制
2023-05-25
安卓app h5 开发
安卓应用开发是当前非常热门的编程领域,其中H5开发也是一个值得关注的技术。H5在安卓应用开发中可以用来制作应用程序的界面,以及实现各种功能。本文将详细介绍H5在安卓应用开发中的原理和实现。一、H5开发原理H5是指使用HTML、CSS、JavaScript等
2023-05-25
h5页面的制作app有哪些
随着智能手机的普及和用户对良好的移动体验的需求,移动应用程序(App)的需求也越来越大。而为了提升移动App的用户体验,越来越多的企业开始探索使用H5页面来制作App。H5页面作为一种轻量级的web页面技术,具有跨平台、易部署、易开发、易维护、易升级等特点
2023-05-25
h5开发app用什么工具
H5开发APP可以使用不同的工具,这些工具包括Webview套壳APP、Hybrid APP开发框架、PWA、Weex、React Native、Ionic等等。以下是对每个工具的详细介绍:1. Webview套壳APP该方法最简单的解决方案是在Andro
2023-05-25
h5混合开发的app能开出来吗
H5混合开发的App是一种基于现有的Web应用技术,通过某些框架结合Native技术实现原生App的开发方式。相比于传统的Native App开发方式,H5混合开发有着更好的跨平台性和可扩展性,并且可以节约开发成本和时间。其原理是将HTML、CSS和Jav
2023-05-25
h5封装安卓app
H5封装安卓App是使用HTML5技术,将Web App包装成为可以在安卓系统上运行的App。H5封装App具有成本低、开发速度快、跨平台支持好等特点,目前被广泛应用于各种应用开发。下面将详细介绍H5封装安卓App的原理和实现方法。一、原理1.1 WebV
2023-05-25
h5打包app页面跳转问题
H5打包成APP是现在比较常见的一种开发方式,可以实现较为便捷的APP开发。但对于页面跳转这类问题,可能会让开发者感到头疼。本文将详细介绍H5打包成APP中页面跳转问题的原理和解决方案。 一、H5打包成APP的原理 H5打包成APP,一般使用的是混合开发的
2023-05-25
app封装h5发系统通知
在移动应用开发中,常常需要使用到H5页面。而一些特定的功能,例如推送系统通知,对于原生应用而言是比较容易实现的,但是对于H5页面,尤其是在封装成Hybrid的形式运行,就要面临一些问题。本文将介绍如何在封装H5页面中实现系统通知的推送。实现思路:在原生应用
2023-05-25
©2015-2021 一门APP yimenapp.com  川公网安备 51019002001185号 蜀ICP备17005078号-3