微信支付开发者文档介接入

好了,多余的话不过多解释,下面咋们大家一起来看看微信的SDK接入文档




如果哥们急的话请调到:https://www.jianshu.com/p/1015841aae48(直接下载Demo填写正确信息直接调起支付)



更新第二版Demo:https://www.jianshu.com/p/1015841aae48





排版2:http://www.jianshu.com/p/c417ce674eb3

可能介入的不是太好,重在学习,学习哈,跟着我的思路来,一定要有耐心,微信坑很多,先看下参数(重要)

给一个获取IP的地址: http://pv.sohu.com/cityjson?ie=utf-8

测试微信数据接口 : https://pay.weixin.qq.com/wiki/tools/signverify/

微信参数

Demo:链接: https://pan.baidu.com/s/1eS1tyWM 密码: 3xih

WRNING!!!!

在类:WX_DATA_XINHAO_HAN设置微信信息

在类AliPay_XINHAO_HAN_DATA设置支付宝信息


appid: 你的APPID

mch_id : 商户号

nonce_str : 生成的随机字符串

body : 商品详情

out_trade_no : 时间

total_fee : 金额

spbill_create_ip : IP地址

notify_url : 回调成功后调用的地址

trade_type : 支持类型(写死 "APP")

步骤1:你先去注册微信官网的一些信息然后获取以下这3个东西

1.APPID 2.你的商户号 3.秘钥

就这几个东西

5337239-1092924a7d0a0581.png
信息


基础信息 nonce_str : 生成的随机字符串

随机字符串生成:

一般都是固定的,自己也懒得写所以找了一个,如果要自己写的话给你提供一些思路

首先把 A-Z 0-9 写到一个String数组中,然后通过Random取索引 for 32次即可

我们看下网上的吧

5337239-f31fe1cb4bcdb2f8.png
MD5

MD5方法

代码复制

排版真难受,这玩意连个代码引用都没有??????


这个使用方法是这样的


5337239-10062603bf9291b8.png
MD5的使用方法

代码复制

```

//生成随机字符串

public staticStringgenNonceStr() {

Random random =newRandom();

returnMD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());

}

```

-----------------------

```

public final staticStringgetMessageDigest(byte[] buffer) {

charhexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

try{

MessageDigest mdTemp = MessageDigest.getInstance("MD5");

mdTemp.update(buffer);

byte[] md = mdTemp.digest();

intj = md.length;

charstr[] =new char[j *2];

intk =0;

for(inti =0;i < j;i++) {

bytebyte0 = md[i];

str[k++] = hexDigits[byte0 >>>4&0xf];

str[k++] = hexDigits[byte0 &0xf];

}

return newString(str);

}catch(Exception e) {

return null;

}

}

```

基础信息 out_trade_no : 时间

这个应该都会把,就是使用JAVA获取你自己当前的时间格式为

比如:2017年7月17日就写成2017717

基础信息 spbill_create_ip : IP地址


使用网路访问:http://pv.sohu.com/cityjson?ie=utf-8

会给你返回 var returnCitySN = {"cip": "219.144.202.177", "cid": "610100", "cname": "陕西省西安市"};

你自己截取一下就OK了

基础信息 notify_url : 回调成功后调用的地址


后台暂时没有提供接口的话就随便写


基础信息 mch_id : 商户号 

你的商户号

基础信息 body : 商品详情

随意写

基础信息 total_fee : 金额

随意写

好了基本的功能数据都介绍完了

导入微信的Sdk

Android Studio适用

--------------------------------

compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'


把刚才的几个参数生成一下sign



5337239-f007b4168901cb15.png
签名生成


到这里了,你会问OrederSendInfo info是个什么鬼??????

记住:WX_DATA_XINHAO_HAN.API_KEY 是你自己的秘钥


别急老规矩先复制代码

```

//生成预支付随机签名

public staticStringgenSign(OrederSendInfo info) {

StringBuffer sb =newStringBuffer(info.toString());

if(WX_DATA_XINHAO_HAN.API_KEY.equals("")) {

Toast.makeText(UIUtils.getContext(),"APP_ID为空",Toast.LENGTH_LONG).show();

}

//拼接密钥

sb.append("key=");

sb.append(WX_DATA_XINHAO_HAN.API_KEY);

String appSign = MD5.getMessageDigest(sb.toString().getBytes());

Log.e("Sign-------------","genSign: "+ appSign.toUpperCase());

returnappSign.toUpperCase();

}

```


好了现在给你解释一下这个是个什么鬼OrederSendInfo info方法参数

这个其实就是一个Bean

看代码

```

public classOrederSendInfo {

privateStringappid;

privateStringmch_id;

privateStringnonce_str;

privateStringbody;

privateStringout_trade_no;

privateStringtotal_fee;

privateStringspbill_create_ip;

privateStringnotify_url;

privateStringtrade_type;

privateStringsign;

publicOrederSendInfo(String appid,String mch_id,String nonce_str,String body,String out_trade_no,String total_fee,String spbill_create_ip,String notify_url,String trade_type) {

this.appid= appid;

this.mch_id= mch_id;

this.nonce_str= nonce_str;

this.body= body;

this.out_trade_no= out_trade_no;

this.total_fee= total_fee;

this.spbill_create_ip= spbill_create_ip;

this.notify_url= notify_url;

this.trade_type= trade_type;

}

publicStringgetAppid() {

returnappid;

}

public voidsetAppid(String appid) {

this.appid= appid;

}

publicStringgetMch_id() {

returnmch_id;

}

public voidsetMch_id(String mch_id) {

this.mch_id= mch_id;

}

publicStringgetNonce_str() {

returnnonce_str;

}

public voidsetNonce_str(String nonce_str) {

this.nonce_str= nonce_str;

}

publicStringgetBody() {

returnbody;

}

public voidsetBody(String body) {

this.body= body;

}

publicStringgetOut_trade_no() {

returnout_trade_no;

}

public voidsetOut_trade_no(String out_trade_no) {

this.out_trade_no= out_trade_no;

}

publicStringgetTotal_fee() {

returntotal_fee;

}

public voidsetTotal_fee(String total_fee) {

this.total_fee= total_fee;

}

publicStringgetSpbill_create_ip() {

returnspbill_create_ip;

}

public voidsetSpbill_create_ip(String spbill_create_ip) {

this.spbill_create_ip= spbill_create_ip;

}

publicStringgetNotify_url() {

returnnotify_url;

}

public voidsetNotify_url(String notify_url) {

this.notify_url= notify_url;

}

publicStringgetTrade_type() {

returntrade_type;

}

public voidsetTrade_type(String trade_type) {

this.trade_type= trade_type;

}

publicStringgetSign() {

returnsign;

}

public voidsetSign(String sign) {

this.sign= sign;

}

//注意排序规则ASCII排序(一般按照A-Z,a-z)就行

@Override

publicStringtoString() {

return"appid="+appid+'&'+

"body="+body+'&'+

"mch_id="+mch_id+'&'+

"nonce_str="+nonce_str+'&'+

"notify_url="+notify_url+'&'+

"out_trade_no="+out_trade_no+'&'+

"spbill_create_ip="+spbill_create_ip+'&'+

"total_fee="+total_fee+'&'+

"trade_type="+trade_type+'&';

}

}

```


//记住在你调用的时候一定要在这个Bean里边赋值,明白不,然后传递给sign的方法签名就生成成功了

签名生成完成了




5337239-4360b33cfcc141a5.png
开始上传数据获取预支付接口


这里边有个XStream你可能找不到

在Studio里边加入这段

```

compile ('com.thoughtworks.xstream:xstream:1.4.7') {

excludegroup:'xmlpull',module:'xmlpull'

}

```

重新编译一下


代码复制

```

public static voidUnfiedOrder(OrederSendInfo orederSendInfo, finalListerner listerner) {

//生成sign签名

String sign = WXpayUtils.genSign(orederSendInfo);

//生成所需参数,为xml格式

orederSendInfo.setSign(sign.toUpperCase());

XStream xstream =newXStream();

xstream.alias("xml",OrederSendInfo.class);

finalString xml = xstream.toXML(orederSendInfo).replaceAll("__","_");

Log.e("xml---------------","UnfiedOrder: "+ xml);

//调起接口,获取预支付ID

OkHttpUtils.ResultCallback resultCallback =newOkHttpUtils.ResultCallback() {

@Override

public voidonSuccess(String response) {

Log.e("返回的数据","onSuccess: "+ response);

String data = response;

data = data.replaceAll("","");

listerner.Success(data);

}

@Override

public voidonFailure(Exception e) {

listerner.Faiulre(e.toString());

}

};

try{

OkHttpUtils.post(WX_DATA_XINHAO_HAN.UNIFIED_ORDER,resultCallback, newString(xml.getBytes("UTF-8"),"ISO8859-1"));

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}

```


至于里边的Listnener

在这里


5337239-3f706d6da1d042af.png
接口

代码复制

```

public interfaceListerner {

voidSuccess(String data);

voidFaiulre(String data);

}

```

拿到微信端的数据之后,直接掉起微信支付


5337239-1e8b62121217e85d.png
调起微信支付

开始填充数据


5337239-49762a8a8addce5c.png
填充数据




特别感谢:掘墓人

博客地址:http://www.jianshu.com/p/9a3127cfda4d

我通过他所给的DEMO集成出了一套及简单的Demo


下载地址: 链接: https://pan.baidu.com/s/1c2zURjq 密码: jpr5


使用方法:你的这几个部位可能会报错注意,注意!!!!!!!!!!


5337239-5b6303626e9d50cf.png
WXActivity


因为微信很吊,你必须按照人家的来,直接在我那个工具包下创建一个Activity名字叫WXEntryActivity


你在你自己创建的Activity-->WXEntryActivity的这个方法下


5337239-26e9d9da7c65bc1c.png

直接复制这段代码

```

WxMain.setStringOnListener(WXEntryActivity.this);

//如果是支付

WxMain.WXMessage wxMessage;

if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {

intcode = baseResp.errCode;

switch(code) {

case0:

if(wxMessage!=null)

wxMessage.message("支付成功",0,"0.0");

//支付成功

break;

case-1:

if(wxMessage!=null)

wxMessage.message("支付失败",-1,"0.0");

//支付失败

finish();

break;

case-2:

if(wxMessage!=null)

wxMessage.message("支付取消",-2,"0.0");

//支付取消

finish();

break;

default:

if(wxMessage!=null)

wxMessage.message("支付失败",-3,"0.0");

//支付失败

setResult(RESULT_OK);

finish();

break;

}

return;

}

```


使用是这样的:


5337239-381d48307d8a7037.png
使用

第一个为你的商品描述,第二个为金额,回调只有0是成功的

0 成功

-1 支付失败

-2 支付取消

-3 支付失败

使用的话直接复制进去就可以了

总而言之微信相比之下还要比支付宝麻烦

说白了就是加密数据发送再给你解析一下数据然后在调起支付,大致就这两个步骤

工具可能会用到的东西

compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

compile ('com.thoughtworks.xstream:xstream:1.4.7') {

excludegroup:'xmlpull',module:'xmlpull'

}

compile'com.zhy:okhttputils:2.4.1'


第二个如果你自己想拼的话就不用了,工具里边是XML的解析器生成的XML

有时间会给大家讲解一些OKHttp底层RXJAVA ,Kotlin,Android源码,

一起加油,0.0哈哈.


5337239-d355019f919ef3be.gif
0.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值