微信支付开发准备工作和详细步骤
2016-09-21 10:33
656 查看
一直知道微信支付的流程,但是没有实际操作过,哈哈,眼高手低的我决定全部总结总结
1
首先 使用公司管理者/高层帐号登录微信开放平台,进入“账号中心”,进行开发者资质认证,需要填写公司资料,包括但不限于,公司注册号,公 司营业执照,公司对外办公电话,公司对公银行卡信息(卡号,发卡行)。审核时间为一周左右。
备注:因为从2015年10月1日起,国家实行三证(组织机构代码证,企业营业执照,税务登记证)合一,所以组织机构代码处填写-工商执照注册号,同样,组织机构代码证,上传-企业工商营业执照。
备注2:进行开发者资质认证需要支付300元人名币/年,只有具备开发者资质认证的开发者才能够使用app支付,授权登录等接口。
2、我们申请的微信支付审核通过以后,会收到一个来自官方的邮件,在新版本里面已经不会直接附上KEY,而是需要用户进入商户平台设置自己的KEY。
微信支付商品平台地址:https://pay.weixin.qq.com/index.php/home/login?return_url=/
3,进入商户平台设置自己的KEY,商品平台账号密码在邮件里面会附上。在平台的账户设置–安全设置–
API安全 设置自己的密钥(KEY)。
点设置密钥,输入32位的密钥,建议大家填写自己支付商户号的MD5值,填写完毕后确认生效。商户号的设置就设置完毕。
4、设置公众平台。
4.1 开发者中心-在列表中找到“网页账号 网页授权获取用户基本信息”,填写自己的回调域名。
42 微信支付–开发配置–支付配置 点击修改,在JS
API网页支付打上勾。设置我们的JS API发起支付请求的链接。
授权目录正确格式是 http://域名/分组/控制器/ 。(仅对ThinkPHP)
如果做JS分享功能,公众号 公众号设置 功能设置 JS接口安全域名
1.获取订单信息
2.根据订单信息和支付相关的账号生成sign,并且生成支付参数
3.将支付参数信息POST到微信服务器,获取返回信息
4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。
微信支付流程图白话版:
1.客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:
备注:以上是参数字段是我们公司服务器定义,给服务器用以获取预支付订单号prePayId用。
备注2:详细字段请参考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
我们公司的请求数据看图
2.app服务器调用微信“统一下单”接口,得到prePayId订单号并返回prePayId给手机客户端;
3.手机客户端使用prePayId及商品信息调起微信客户端进行支付;
3.1用户操作:输入密码进行支付;返回键取消支付;网络无连接支付失败等;
4.微信客户端回调支付结果给咱们的APP客户端;
5.微信服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)
IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true);
mWxApi.registerApp(WX_APPID);
/**
* 请求app服务器得到的回调结果
*/
@Override
public void onGet(JSONObject jsonObject) {
if (mWxApi != null) {
PayReq req = new PayReq();
req.appId = WX_APPID;// 微信开放平台审核通过的应用APPID
try {
req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号
req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取
req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位,服务器小哥会给咱生成
req.timeStamp = jsonObject.getString("timestamp");// 时间戳,app服务器小哥给出
req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接写死,服务器返回的也是这个固定值
req.sign = jsonObject.getString("sign");// 签名,服务器小哥给出,他会根据:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指导得到这个
} catch (JSONException e) {
e.printStackTrace();
}
mWxApi.sendReq(req);
Log.d("发起微信支付申请");
}
}
在app包下新建wxapi包,比如app包名为com.xiongit.app,那个新建的包路径为com.xiongit.app.wxapi,该包下新建WXPayEntryActivity,继承自任意Activity。该Activity用以接收支付结果回调,清单声明此Activity的格式为
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
WXPayEntryActivity代码示例
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
private static final String APP_ID = "your app id";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
/**
* 得到支付结果回调
*/
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付结果码
}
}
回调中errCode值列表:
0 支付成功
-1 发生错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 发生场景:用户不支付了,点击取消,返回APP。
转载处: http://blog.csdn.net/xiong_it/article/details/51685033
http://blog.sina.com.cn/s/blog_4fb35f3f0102vhdz.html
微信支付前的准备工作
1首先 使用公司管理者/高层帐号登录微信开放平台,进入“账号中心”,进行开发者资质认证,需要填写公司资料,包括但不限于,公司注册号,公 司营业执照,公司对外办公电话,公司对公银行卡信息(卡号,发卡行)。审核时间为一周左右。
备注:因为从2015年10月1日起,国家实行三证(组织机构代码证,企业营业执照,税务登记证)合一,所以组织机构代码处填写-工商执照注册号,同样,组织机构代码证,上传-企业工商营业执照。
备注2:进行开发者资质认证需要支付300元人名币/年,只有具备开发者资质认证的开发者才能够使用app支付,授权登录等接口。
2、我们申请的微信支付审核通过以后,会收到一个来自官方的邮件,在新版本里面已经不会直接附上KEY,而是需要用户进入商户平台设置自己的KEY。
微信支付商品平台地址:https://pay.weixin.qq.com/index.php/home/login?return_url=/
3,进入商户平台设置自己的KEY,商品平台账号密码在邮件里面会附上。在平台的账户设置–安全设置–
API安全 设置自己的密钥(KEY)。
点设置密钥,输入32位的密钥,建议大家填写自己支付商户号的MD5值,填写完毕后确认生效。商户号的设置就设置完毕。
4、设置公众平台。
4.1 开发者中心-在列表中找到“网页账号 网页授权获取用户基本信息”,填写自己的回调域名。
42 微信支付–开发配置–支付配置 点击修改,在JS
API网页支付打上勾。设置我们的JS API发起支付请求的链接。
授权目录正确格式是 http://域名/分组/控制器/ 。(仅对ThinkPHP)
如果做JS分享功能,公众号 公众号设置 功能设置 JS接口安全域名
微信支付详细步骤
1.获取订单信息2.根据订单信息和支付相关的账号生成sign,并且生成支付参数
3.将支付参数信息POST到微信服务器,获取返回信息
4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。
//微信相关 private static final String <span style="color: rgb(51, 51, 51); font-family: "Source Code Pro", monospace; font-size: 14px; line-height: 20.3px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">WX_APPID</span>=" "; private IWXAPI api;
微信支付流程图白话版:
1.客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:
<code class="language-java hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">params.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"appid"</span>, appID);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 微信appid,选择性上传,服务器写死亦可</span> params.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"money"</span>, money);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 支付金额,单位:分</span> params.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"name"</span>, goodsName);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 商品名称</span> params.put(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"currencytype"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"CNY"</span>);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 支付币种,只能填CNY,代表人民币</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>
备注:以上是参数字段是我们公司服务器定义,给服务器用以获取预支付订单号prePayId用。
备注2:详细字段请参考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
我们公司的请求数据看图
2.app服务器调用微信“统一下单”接口,得到prePayId订单号并返回prePayId给手机客户端;
3.手机客户端使用prePayId及商品信息调起微信客户端进行支付;
3.1用户操作:输入密码进行支付;返回键取消支付;网络无连接支付失败等;
4.微信客户端回调支付结果给咱们的APP客户端;
5.微信服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)
IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true);
mWxApi.registerApp(WX_APPID);
/**
* 请求app服务器得到的回调结果
*/
@Override
public void onGet(JSONObject jsonObject) {
if (mWxApi != null) {
PayReq req = new PayReq();
req.appId = WX_APPID;// 微信开放平台审核通过的应用APPID
try {
req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号
req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取
req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位,服务器小哥会给咱生成
req.timeStamp = jsonObject.getString("timestamp");// 时间戳,app服务器小哥给出
req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接写死,服务器返回的也是这个固定值
req.sign = jsonObject.getString("sign");// 签名,服务器小哥给出,他会根据:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指导得到这个
} catch (JSONException e) {
e.printStackTrace();
}
mWxApi.sendReq(req);
Log.d("发起微信支付申请");
}
}
在app包下新建wxapi包,比如app包名为com.xiongit.app,那个新建的包路径为com.xiongit.app.wxapi,该包下新建WXPayEntryActivity,继承自任意Activity。该Activity用以接收支付结果回调,清单声明此Activity的格式为
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
WXPayEntryActivity代码示例
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
private IWXAPI api;
private static final String APP_ID = "your app id";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, APP_ID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
/**
* 得到支付结果回调
*/
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付结果码
}
}
回调中errCode值列表:
0 支付成功
-1 发生错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 发生场景:用户不支付了,点击取消,返回APP。
清单menifest申明所需权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
转载处: http://blog.csdn.net/xiong_it/article/details/51685033
http://blog.sina.com.cn/s/blog_4fb35f3f0102vhdz.html
相关文章推荐
- java项目开发中MyEclipse新建工作空间后的配置详细步骤
- Java项目开发中Eclipse新建工作空间后的配置详细步骤
- php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员
- 【cocos2dx 3.2】Flappy Bird开发超详细讲解(一)准备工作
- 安卓开发接入微信支付功能的详细步骤(手把手教你一步一步接入,适合小白)
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
- 使用Html5+C#+微信 开发移动端游戏详细教程 :(二)准备工作&开发环境
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
- FleaPHP 开发指南 - 1. 开始前的准备工作
- 用nettiers + svn + resharper + r.a.d + ccNet开发前的准备工作
- 使用ARM开发详细步骤
- FleaPHP 开发指南 - 1. 开始前的准备工作
- FleaPHP 开发指南 - 1. 开始前的准备工作
- 网页开发的准备工作
- FleaPHP 开发指南 - 1. 开始前的准备工作
- 从事软件开发工作前应该做好哪些准备
- FleaPHP 开发指南 - 1. 开始前的准备工作
- FleaPHP 开发指南 - 1. 开始前的准备工作
- FleaPHP 开发指南 - 1. 开始前的准备工作
- 项目开发的前期准备工作