# Woocommerce Android SDK
This is an woocommerce api client for android
Built-based on the documentation: http://woocommerce.github.io/woocommerce-rest-api-docs/#introduction
## Installation
Please note that files are still being moved around - the project should be stable before end Feb 2019
### Maven dependency:
Step 1. Add the JitPack repository to your build file
```xml
jitpack.io
https://jitpack.io
```
Step 2. Add the dependency
```xml
com.github.gilokimu
woodroid
0.2.0
```
### Gradle dependency:
Step 1. Add the JitPack repository to your build file
```gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
```
Step 2. Add the dependency
```gradle
dependencies {
implementation 'com.github.gilokimu:woodroid:0.2.0'
}
```
## Getting started
Generate API credentials (Consumer Key & Consumer Secret) following this instructions
.
Check out the WooCommerce API endpoints and data that can be manipulated in .
## Demo
I have left consumer key and secret within the app, for you to test the app without an installation of wordpress. To use my installation of wordpress, here are the credentials:
username: demo
password: demo2019
https://gilo.me/store/wp-admin
PS/ Do no harm
## Setup
Setup for the new WP REST API integration (WooCommerce 2.6 or later):
```kotlin
val woocommerce = Woocommerce.Builder()
.setSiteUrl("http://example.com")
.setApiVersion(Woocommerce.API_V2)
.setConsumerKey("ck_XXXXX")
.setConsumerSecret("cs_XXXX")
.build()
```
## Usage
Getting products example
```kotlin
woocommerce.ProductRepository().products().enqueue(object : Callback> {
override fun onResponse(call: Call>, response: Response>) {
val productsResponse = response.body()
for (product in productsResponse!!) {
products.add(product)
}
adapter.notifyDataSetChanged()
}
override fun onFailure(call: Call>, t: Throwable) {
}
})
```
## Supported resources
The sdk currently supports :
1. Order Notes
2. Refunds
3. Attributes
4. Attribute Terms
5. Product Category
6. Shipping Class
7. Product Tags
8. Variations
9. Coupons
10. Customers
11. Orders
12. Products
13. Reports
### Coming soon
14. Settings
15. Payment gateway
## API Methods
The general resource method calls are
1. Create - Pass the object to create
2. List - a list of all items
3. View single method - retries a single item
4. Delete - deletes the resource
5. Filter - provides a list that meets a criteria
### Create Method
Create an instance of the resource then pass onto a .create() function on the resource repository
```kotlin
val coupon = Coupon()
coupon.code = code
coupon.description = description
woocommerce.CouponRepository().create(coupon).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
val couponResponse = response.body()
finish()
}
override fun onFailure(call: Call, t: Throwable) {
}
})
```
### List Method
```kotlin
woocommerce.CouponRepository().coupons().enqueue(object : Callback> {
override fun onResponse(call: Call>, response: Response>) {
val couponResponse = response.body()
for (coupon in couponResponse!!) {
coupons.add(coupon)
}
adapter.notifyDataSetChanged()
}
override fun onFailure(call: Call>, t: Throwable) {
}
})
```
### View single item
```kotlin
val couponId = intent.getIntExtra("couponId", 0)
woocommerce.CouponRepository().coupon(couponId).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
val coupon = response.body()!!
etCode.setText(coupon.code.toUpperCase())
etDescription.setText(coupon.description)
}
override fun onFailure(call: Call, t: Throwable) {
}
})
```
### Delete item
```kotlin
woocommerce.CouponRepository().delete(couponId).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
val coupon = response.body()!!
finish()
}else{
Toast.makeText(this@CouponActivity, "" + response.code() + " : " + response.message(), Toast.LENGTH_SHORT).show()
}
}
override fun onFailure(call: Call, t: Throwable) {
stopShowingLoading()
}
})
```
### Filter item
```kotlin
val filter = CouponFilter()
filter.search = "FEB"
woocommerce.CouponRepository().coupons(filter).enqueue(object : Callback> {
override fun onResponse(call: Call>, response: Response>) {
val couponResponse = response.body()
for (coupon in couponResponse!!) {
coupons.add(coupon)
}
adapter.notifyDataSetChanged()
}
override fun onFailure(call: Call>, t: Throwable) {
}
})
```
### Sample app
The sample app implements an MVVM approach which would look slightly different from the above. The methods are the same though
## Contribution
Contributions are highly welcomed, just create a PR
## Slack
You can also reach out through slack in case of any issues with installation or feature request
## Love the Project?
You can donate to support the project futher. Donate with Crypto